2010-08-13 62 views
0

我在這裏有一個小問題。 我用一個簡單的規則來重定向到一個腳本的所有請求,節選一些文件夾與靜態內容:mod_rewrite創建301而不是透明重定向如果文件夾存在

RewriteEngine On 
RewriteCond $1 !^(templates|css|js|uploads)/(.*)$ 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

大多數時候,重定向是良好的,透明的。 但是,如果與URL匹配的文件夾存在,並且如果我沒有放上最後的「/」,我將會有301重定向。

例子:(文件夾庫不存在,但不MODS)

  • HT * P://本地主機/測試/畫廊/ - >行
  • HT * P://本地主機/測試/ MODS/- >確定
  • HT 號碼://本地主機/測試/ MODS - > 301重定向到HT號碼://本地主機/測試/ MODS/URL = MODS

我有嗎?這個問題在所有的apache2服務器上(經過測試的Fedora,Debian,Windo WS)。

有人知道如何解決這個問題嗎? 謝謝

回答

1

這是由於DirectorySlash指令,它將執行重寫後執行外部重定向,這意味着將您的添加查詢字符串與它意想不到的結果。

您可以關閉DirectorySlash,但由於文檔中描述的原因,不推薦這樣做。在這種情況下,首選選項可能只是執行mod_dir的工作,在執行規則之前重定向到適當的以斜槓終止的URL。在你現有的規則之上的東西應該可以工作:

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^.*$ /$0/ [R=301,L] 
+0

就是這樣,謝謝! – 2010-08-13 19:40:52

相關問題