2012-09-04 25 views
4

這是我的.htaccess文件:與-Indexes陷入無限重定向循環

# NO LISTING OF INDEXES 
Options -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # NIX THE www BECAUSE IT IS NO LONGER 1996 AND YOU'RE COOLER THAN THAT 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)/$ http://%1/$1 [R=301,L] 

    # NIX TRAILING SLASHES BECAUSE SEO IS A VENGEFUL GOD AND WHATNOT 
    RewriteRule ^(.*)/$ $1 [R=301,L] 

    # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

# ERROR DOCS 
ErrorDocument 400 /error/400 
ErrorDocument 401 /error/401 
ErrorDocument 403 /error/403 
ErrorDocument 404 /error/404 
ErrorDocument 500 /error/500 

如果我試圖訪問一個文件夾(/images//images或在我的網站其他一些真正的文件夾結構)它落入一個重定向循環。

我嘗試添加RewriteCond %{REQUEST_FILENAME} !-d尾隨斜線規則,以及「固定」在儘可能現在執行上適當結尾的斜線重定向文件夾,但也通過文件夾名,我的劇本就好像它是一個烤前我的CMS的URI查詢弄清楚。

我想我現在可以嘗試通過檢查URI是否是某人試圖非法列出的文件夾來解決此問題,但理想情況下,會有一個優雅的.htaccess解決方案將文件夾列表調用重定向到那些禁止的頁面我很有用地在那裏宣佈。有人知道嗎?

+0

我敢肯定你不應該使用RewriteRules的R = 301部分。 301 HTTP狀態代碼適用於請求的資源已永久移動的情況。例如,剝離* www *,並不意味着我是使用該狀態碼的有效理由。 –

+0

嗯。在我非常確定用戶正在尋找什麼內容的情況下(尾部斜線和www子域名只是裝飾),我從不會讓我覺得這是一個概念上不好的事情,但我不希望搜索引擎蜘蛛混淆關於重複的內容。我有效地說,你正在尋找生命在這裏。 – Hoatzin

回答

1

不知道它是否會有所作爲,但我通常用這個頂部之前的任何條件規則

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

你重寫基地後開始啓動。也許會提高。

1

註釋掉/刪除此行:

RewriteRule ^(.*)/$ $1 [R=301,L] 

你並不真的需要它,因爲你已經有了Options -Indexes在頂部,當有人試圖列出目錄的內容,以顯示禁止錯誤。除此之外,你的代碼做一些小的調整,如下所示:

# NO LISTING OF INDEXES 
Options +FollowSymLinks -MultiViews -Indexes 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)/$ http://%1/$1 [R=301,L] 

    # SEND ALL NON-FILE REQUESTS TO index.php FOR FIGURING OUT 
    RewriteRule ^index\.php$ - [L,NC] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule^index.php [L] 
</IfModule> 

# ERROR DOCS 
ErrorDocument 400 /error/400 
ErrorDocument 401 /error/401 
ErrorDocument 403 /error/403 
ErrorDocument 404 /error/404 
ErrorDocument 500 /error/500 
+0

感謝您的一般優化,但我不想擺脫這一特定線路。該線吃掉了尾部的斜線。我不希望'/ controller/action/foo'和'/ controller/action/foo /'顯示重複的內容,並將它們索引爲兩個不同的東西,否則無論如何都無法形容的SEO恐懼將會降臨我。無論哪種方式,這似乎並沒有使鏈接到一個文件夾會導致錯誤。它仍然會將它還給我的CMS。也許我應該放棄並考慮這個功能? – Hoatzin

+0

其實你並不需要一個單獨的規則去除尾部斜線。你可以使用'DirectorySlash Off'指令來實現。 – anubhava