2016-08-17 63 views
0

這段代碼在我的.htaccess中301-重定向:index.html和index.php到根(/):.htaccess - 簡單重定向:索引(沒有擴展名!)/ index.html/index.php到root

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

的問題是,許多web服務器治療 '索引'(沒有的.html或.PHP),其爲有效的請求;結果是:example.com/index提供了200個狀態(這可能會產生重複的內容)。

所以我的目標是使用我的當前代碼(上面)並添加到它以便'索引'是301-重定向到根。換句話說,代碼應該重定向:(即example.com)

example.com/index 
example.com/index.html 
example.com/index.php 

我想這以下,但它太複雜,我正確地讓它(我不喜歡加入當前的代碼,這樣,只有一個重定向代碼,而不是多重的RewriteCond /重寫規則:

(!這一個不工作)

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

'index'給予200的反應可能通過['選項MultiViews'(引起https://httpd.apache.org/docs/2.4/mod/ core.html#options),另請參閱[內容協商](https://httpd.apache.org/docs/2.4/content-negotiation.html#multiviews) –

回答

1

你可以調整你的正則表達式使它匹配/index/index.html/index.php

這個替換您的規則:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index(\.(html?|php))?\ HTTP/ [NC] 
RewriteRule ^((?:[^/]+/)*)index(\.(html?|php))?$ /$1 [R=301,L,NC,NE] 
相關問題