2010-06-08 51 views
1

是的,mod_rewrite讓我瘋狂。意外的htaccess行爲(mod_rewrite和apache)

這裏的問題是:

我的htaccess

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

當我嘗試訪問該頁面advantix(所以地址是www.mywebsite.com/advantix),我被重定向到advantix/?url=advantix

在展望訪問日誌,我有一個可疑的301在中間

"GET /advantix HTTP/1.1" 301 335 "-" "Mozilla/5.0" 
"GET /advantix/?url=advantix HTTP/1.1" 200 186 "-" "Mozilla/5.0" 

有一個重要的細節:advantix是一個目錄

所以,如果我評論該規則,advantix去文件夾和列出文件。

爲什麼它自動應用/如果有文件夾匹配?

我並不想達到的文件夾,我想給advantix呼叫到達index.php?url=advantix

我也有rewriteLogs,但他們沒有幫助更多。我的虛擬主機conf有Directory標籤Options All,如果有幫助,我對此不甚瞭解。

回答

1

關閉DirectorySlash的Apache。這似乎是導致301重定向。

DirectorySlash Off 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 
+0

謝謝,它的工作原理。我沒有找到該指令! – apelliciari 2010-06-09 07:27:39

+0

沒問題。雖然我知道這個功能,但直到現在還沒有意識到確切的指令。 – 2010-06-09 08:20:04

0

嘗試這一次,

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 
+0

這顯然帶我到文件夾列表,我不想這個。 – apelliciari 2010-06-08 15:40:04

0

我有類似的問題。我的解決方案是停止在「壞」路徑(最後沒有斜線的目錄)上重寫URL:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*[^/])$ $1 [L,QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*?)/*$ index.php?route=$1 [L,QSA]