2013-08-17 21 views
1

我有以下的htaccess規則:重寫條件匹配的任何文件擴展名

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

這樣做是插入一個結尾斜槓字符我所有的URL,即:

http://localhost/advertising成爲http://localhost/advertising/

現在我有一些網址,如:http://localhost/contact.html

但我的htaccess規則應用斜槓t Ø這些URL - 所以上面的網址將成爲http://localhost/contact.html/

現在我加入了以下條件,以防止這種情況的發生:

RewriteCond %{REQUEST_URI} !\.(html|php)$ 

但我想比這更聰明一點 - 我想要一個單一的表達這將匹配用戶輸入的任何擴展名。我該如何實現?

+1

你爲什麼不只是使用mod_dir和'DirectorySlash On'? –

+0

@JonLin我認爲該指令不適用於不存在的目錄! – undone

回答

1

這將重寫所有目錄而不用斜線!

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)(\..{3,5}|/)$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 
+0

嗨,這解決了文件擴展名的問題,但它現在不會將結尾的斜槓添加到非文件URL,例如, 'http:// localhost/advertising' – GSTAR

+0

您是指所有沒有擴展名的網址都應該有斜線? – undone

+0

是的:)這就是我試圖用我的原始代碼實現 - 我沒有意識到它也將重寫帶有文件擴展名的URL。 – GSTAR