2016-04-30 110 views
1

我在.htaccess文件:
子目錄不重定向到指數

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

用下面的代碼使用它之後,它終於讓我刪除文件擴展名,我的目標,
但隨後沒有子目錄更長的時間重定向到它們各自的索引文件, 反而只顯示'禁止'和'404'消息。

然後我試圖讓手動在.htaccess重定向:

Redirect 301 /subfolder http://www.domain.com/subfolder/index 

然後讓我卡在重定向循環其中,甚至在源代碼中刪除它們之後,他們已經進行了。我還應該指出,我幾乎沒有使用.htaccess的經驗。

回答

2

歡迎來到永久性重定向測試的美妙世界:犯錯誤,直到您清除瀏覽器緩存,它纔會繼續發生錯誤。

首先,刪除重定向,並清除瀏覽器的緩存。其次,想象一下,您的規則適用於每個請求,而不僅僅是您要更改的請求。

您發現的問題是對匹配您的規則的目錄的請求,然後重寫。請求http://domain.com/sub/將被重寫爲http://domain.com/sub/.php。現在不存在任何東西。從無限遞歸中拯救你的唯一方法就是檢查URL中的點。

那麼,我們該如何解決?那麼,我們檢查請求的文件是不是一個開始的目錄。現在我們不重寫url,如果它是一個目錄,並且DirectoryIndex負責其餘部分。爲了防止無限遞歸,可以測試url是否已經以.php結尾,但在這種情況下,您已經處理了該問題。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

非常感謝,它的工作完美,同時給我更多的關於.htaccess的見解,以及刪除規則似乎沒有效果的原因。感謝您爲我清理。公認。 – Fate

-1

嘗試使用此重定向。它陷入了一個循環,因爲301是一個永久性的重定向,它被保存在瀏覽器中。

RedirectMatch 301 /subfolder(.*) //$1