1

是的,mod_rewrite 快把我逼疯了。

这是问题所在:

我的 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请转到文件夹并列出文件。

/如果有文件夹匹配,为什么它会自动应用?

我不想访问该文件夹,我想通过 index.php?url=advantix 调用 advantix.

我也有 rewriteLogs,但它们没有更多帮助。我的 vhost conf 有Directory标签Options All,如果有帮助,我对此不太了解。

4

3 回答 3

1

关闭DirectorySlash Apache 指令。这似乎导致了 301 重定向。

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
于 2010-06-08T20:48:35.747 回答
0

试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$    index.php?url=$1 [L,QSA]
于 2010-06-08T15:19:54.150 回答
0

我有一个类似的问题。我的解决方案是停止在“坏”路径(末尾没有斜杠的目录)上重写 URL:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ $1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/*$ index.php?route=$1 [L,QSA]
于 2011-02-23T06:20:52.803 回答