2013-03-15 109 views
0

我正在使用mod_rewrite從文件中刪除.HTML擴展名,並將其重定向到其友好版本。文件擴展名mod_rewrite會干擾驗證文件嗎?

我使用pinterest.htmlgoogle.html文件來驗證我的Pinterest頁面和Google Apps帳戶。

mod_rewrite的,我用這:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(.+)$ $1.html [L,QSA] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/ 
RewriteRule ^(.*)\.html$ /$1 [R=301,L] 

我的問題是關於相對於驗證文件的邏輯和它的功能。我理解的目的是爲'x' file'y' URL服務。

所以即使我服務example.com/pinterest.htmlexample.com/pinterest由於重定向和.HTML去除,不應該有任何干擾,因爲該文件仍然是可讀一如既往,正確嗎?

回答

1

不要重寫這兩個特殊文件。向cond正則表達式添加否定斷言:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(?!pinterest\.html|google\.html).*\.html\ HTTP/ 

PS。爲何不僅匹配%{REQUEST_URI}

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

我已經用簡單的正則表達式重寫了這個。這說的是不匹配兩個特殊文件,但匹配.html文件的任何其他請求。

+0

謝謝你的解決方案,我不是很熟悉mod_rewrite,它只是我從另一個stackoverflow問題的答案中使用的代碼。介意我問別的東西嗎?在cond中,最後的'HTTP /'的目的是什麼?如果我從FILENAME切換到URI,具體的區別是什麼? – popsicle 2013-03-15 19:54:12

+1

查看更改:-) – TerryE 2013-03-15 19:58:52

+0

再次感謝。嘗試了一些不同的組合,只得到了以下工作:! '的RewriteCond%{} REQUEST_FILENAME -f 的RewriteCond%{} REQUEST_FILENAME -d 的RewriteCond%{} REQUEST_FILENAME的.html -f 重寫規則^(+)$ $ 1 .html [L,QSA] RewriteCond%{THE_REQUEST}^[AZ] {3,9} \ /(?! pinterest \ .html | google \ .html)。* \。html \ HTTP/ RewriteRule^。*)\。html $/$ 1 [R = 301,L]' 我正在閱讀apache.org上'REQUEST_URI','REQUEST_FILENAME'和'THE_REQUEST'之間的差異。 'REQUEST_URI'似乎是最好的,但我不知道如何實現它。爲了獲得最佳性能,我可以在以上重寫中更改哪些內容? – popsicle 2013-03-16 12:17:32