【问题标题】:mod_rewrite creates 301 instead of transparent redirection if folder exists如果文件夹存在,mod_rewrite 创建 301 而不是透明重定向
【发布时间】:2010-08-14 03:32:02
【问题描述】:

我在这里遇到了一个小问题。 我正在使用一个简单的规则将所有请求重定向到脚本,但一些具有静态内容的文件夹除外:

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

大多数时候,重定向是好的和透明的。 但是如果与 URL 匹配的文件夹存在并且我没有放最后一个“/”,我将有一个 301 重定向。

示例:(文件夹库不存在,但 mods 存在)

  • ht*p://localhost/test/gallery/ -> 好的
  • ht*p://localhost/test/mods/ -> 好的
  • htp://localhost/test/mods -> 301 重定向到 htp://localhost/test/mods/?url=mods

我在所有 apache2 服务器上都有这个问题(测试过的 Fedora、Debian、Windows)。

有人知道如何解决这个问题吗? 谢谢

【问题讨论】:

    标签: apache .htaccess mod-rewrite apache2


    【解决方案1】:

    这是由于DirectorySlash 指令导致的,该指令将在您执行重写后执行外部重定向,这会导致您添加的查询字符串被带走。

    您可以关闭DirectorySlash,但由于文档中描述的原因,不建议这样做。在这种情况下,首选选项可能只是执行mod_dir 的工作,在执行规则之前重定向到适当的以斜杠结尾的 URL。您现有规则之上的类似内容应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      相关资源
      最近更新 更多