【问题标题】:How to keep mod_rewrite from recognizing directories如何防止 mod_rewrite 识别目录
【发布时间】:2012-11-18 05:39:33
【问题描述】:

所以,最近我一直在处理与 mod_rewrite 相关的问题,似乎没有人尝试做类似的事情。人们遇到的每个问题都是关于尝试从重写中排除目录,而我希望它们像其他任何目录一样包含

例如,假设我的根目录中包含 .htaccess 文件是www.example.com/root/

当我输入组合目录(例如 www.example.com/root/asdfasdf)时,我将 .htaccess 文件设置为将我重定向到 www.example.com/root/index.php?url=asdfasdf,而无需更改浏览器地址栏中的内容

但是,在尝试对 真实 目录(例如 www.example.com/root/admin)执行相同操作时,它不仅会更改地址栏中的 url,还会将其更改为 www.example.com/root/admin/?url=admin

谁能向我解释发生了什么事。我已经尝试了各种不同的正则表达式和标志,而重定向任何东西的那些仍然会导致同样的问题。我可以转到www.example.com/root/admin 并仍然被重定向到根文件夹,同时隐藏查询字符串为?url=admin

[更新:附加信息 11-30-2012]

就像我说的那样,我已经尝试过它会使用多行不同的代码并得出完全相同的重定向问题,前提是重定向不会完全失败并产生 500 错误。不过,这是我最新的迭代之一,它产生了不能忽略目录的问题。

RewriteEngine On
RewriteBase /root/

RewriteCond %{REQUEST_FILENAME} !^(.\*\\.("png"|"jpg"|"gif") [NC]
RewriteRule (.\*?) index.php?url=$1 [QSA]

重写条件是在请求图片时阻止引擎重写(对于 css 和 img 标签)。我只是之前没有提到它,因为我尝试删除该行并且它没有任何区别。

不过,我并不是 mod_rewrite 的大师,所以如果您发现我写的任何内容有任何错误,请随时告诉我。

【问题讨论】:

    标签: mod-rewrite query-string directory


    【解决方案1】:

    您的问题并不完全清楚您要做什么,看看您的 .htaccess 文件实际上是什么样子会很有帮助。但是,根文件夹中的 .htaccess 文件中有以下几行:

    RewriteCond %{REQUEST_URI} !^/root/index\.php
    RewriteRule (.*) /root/index.php?url=$1 [L]
    

    将向http://www.example.com/root/madeupfolder/madeupfile.php 发出的请求静默重定向到http://www.example.com/root/index.php?url=madeupfolder/madeupfile.php,并且也将对真实文件夹执行相同操作。因此,如果文件夹 admin 存在于根目录下,则对 http://www.example.com/root/admin 的请求将被静默重定向到 http://www.example.com/root/index.php?url=admin

    但是,如果您想提供实际存在的文件夹和文件,但重写不存在的文件夹和文件的请求,那么您需要像这样调整重写

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/root/index\.php
    RewriteRule (.*) /root/index.php?url=$1 [R=301]
    

    这仍会将向http://www.example.com/root/madeupfolder/madeupfile.php 发出的请求重写为http://www.example.com/root/index.php?url=madeupfolder/madeupfile.php,但对于真正的文件夹和文件,例如向http://www.example.com/root/admin 发出的请求,将提供管理文件夹。

    希望这会有所帮助,但如果您能稍微澄清一下您的问题,那么我可以再次尝试提供帮助。

    【讨论】:

    • 我想我从来没有真正尝试过你的建议。我在您的代码中将 [L] 与 [QSA,L] 交换了,现在它可以完美运行了!非常感谢您的帮助。
    • 实际上,经过一番测试,我发现这只适用于我想要的方式if重定向是在mac上的“Sites”文件夹中。它在 XAMPP 的常规 localhost htdocs 文件夹中无法正常工作。我将不得不继续研究一下,但这至少可以验证我的代码应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2011-10-10
    • 2011-11-30
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多