【问题标题】:Unexpected htaccess behaviour (mod_rewrite and apache)意外的 htaccess 行为(mod_rewrite 和 apache)
【发布时间】:2011-03-01 05:31:17
【问题描述】:

是的,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,如果有帮助,我对此不太了解。

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-routing error-log


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 这显然会将我带到文件夹列表,我不想要这个。
    【解决方案2】:

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

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

    【讨论】:

    • 没问题。虽然我知道这个功能,但直到现在才知道确切的指令。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2011-05-30
      • 2011-07-02
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 2021-11-26
      • 2010-09-20
      相关资源
      最近更新 更多