2010-01-05 26 views
5

Khi tôi nhập "http://example.com/Hello%20There/", nó sẽ hiển thị trang chỉ mục là: "http://example.com/Hello%20There/index.html".Trailing slashes problem

Vâng, những gì tôi muốn làm là khi người dùng nhập "http://example.com/Hello%20There" (vì vậy giống như trang đầu tiên ngoại trừ nó không có dấu gạch chéo).

Tôi đã thử nhiều thứ và cụm từ thông dụng đặc biệt, nhưng không có gì hoạt động vì tôi nghĩ rằng máy chủ dừng quá trình kết thúc reg khi tìm thấy khoảng trống ("% 20" trong URL).

tôi đã cố gắng reg này exp:

Options +FollowSymLinks 
rewriteEngine On rewriteCond %{REQUEST_URI} ^(.*)\ (.*html)$ 
rewriteRule ^.*$ %1-%2 [E=space_replacer:%1-%2] 
rewriteCond %{ENV:space_replacer}!^$ 
rewriteCond %{ENV:space_replacer}!^.*\ .*$ 
rewriteRule ^.*$ %{ENV:space_replacer} [R=301,L] 

và cũng đặt:

DirectorySlash On 

trong "mod_dir" mô-đun của Apache.

Vì vậy, câu hỏi của tôi là: - Làm thế nào để nói đến máy chủ để thêm một dấu gạch chéo khi người dùng nhập một url mà không có một dấu gạch chéo; $

Trả lời

13

Bạn có thể tạo ra một nhân vật tùy chọn bằng cách thêm các ? lượng hóa để nó như thế này:

RewriteRule ^([^/]+)/?$ $1/index.html 

Bây giờ cả hai /foobar/foobar/ sẽ được viết lại để /foobar/index.html.

Nhưng sẽ tốt hơn nếu bạn sử dụng chỉ là một lỗi chính tả, có hoặc không có dấu gạch chéo, và chuyển hướng người khác một:

# remove trailing slash 
RewriteRule (.+)/$ /$1 [L,R=301] 

# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$1/ [L,R=301] 

Những quy định này hoặc loại bỏ hoặc thêm một thiếu gạch chéo và làm một vĩnh viễn chuyển hướng.

+0

Bạn bỏ lỡ ngoặc trong quy tắc viết lại lần thứ hai. –

+0

Xin vui lòng, đó là sự kết hợp cuối cùng của các quy tắc được sử dụng? Tôi thực sự quan tâm đến câu hỏi này, và tôi không thể làm cho nó chạy ok ... Cảm ơn –

1

Tôi đã gặp vấn đề tương tự, nhưng tôi đã sử dụng mod_alias để thiết lập trang con. Hóa ra, tôi cần tạo một bí danh thứ hai mà không có dấu gạch chéo để nó hoạt động chính xác. Nhìn một cái gì đó như thế này:

Alias /forum/ "/var/www/forum" 
Alias /forum "/var/www/forum" 

<Directory "/var/www/forum"> 
    Options FollowSymlinks 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

Trong Ubuntu, tôi đã phải chỉnh sửa file /etc/apache2/mods-enabled/alias.conf với những dòng này, sau đó khởi động lại apache. Không thể tìm thấy câu trả lời này ở bất cứ đâu trên web; Tôi chỉ vấp vào bản thân mình khi mod_rewrite không hoạt động và lệnh DirectorySlash cũng không giúp được gì. Tôi đã thêm một chương trình không phải là Drupal như một trang con dưới sự cài đặt Drupal, đó là những gì khởi đầu cho tất cả sự điên rồ này ngay từ đầu ...