1

我主持的網站只是一堆靜態的.html文件。我不希望有在URL中.html文件擴展名,所以我添加了一個重寫規則:Apache:我如何將foo.html重定向到foo並將foo重寫爲foo.html?

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

這是很簡單的,並能正常工作,但我現在還喜歡重定向( 302)以.html結尾爲規範路徑的URL,即沒有文件擴展名。我試過以下:

RewriteCond %{REQUEST_FILENAME} \.html$ 
    RewriteRule ^(.+)\.html$ /$1 [L,R] 

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

但是,這導致無盡的重定向循環。我懷疑這是因爲第二條規則,即內部重寫,仍然觸發第一條規則,即外部重定向。

我該怎麼做到這一點?我查看了所有的重寫標誌,並嘗試了一堆聽起來很有希望的,但我沒有設法使這項工作。我怎樣才能從foo.htmlfoo重寫,並仍然從foofoo.html做內部重寫?

回答

2

several questions詢問這個程序是如何工作的。使用THE_REQUEST變量:?

RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.html 
RewriteRule \.html$ /%1 [R=302] 

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

哎喲,讓我懷疑我的谷歌賦:(作品輝煌 – futlib

+0

這是非常有用的一個人怎麼會這樣,下面的工作太擴展它/富=> /富/, /foo.html =>/foo /和/ foo /就是這樣,所有三個都返回foo.html。謝謝。 – Vishal

相關問題