1

所以,最近我一直在处理一个与 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/adminwww.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 的大师,所以如果你发现我写的任何东西有任何错误,请随时告诉我。

4

1 回答 1

0

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

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

将静默重定向到的请求http://www.example.com/root/madeupfolder/madeupfile.phphttp://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,将提供管理文件夹。

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

于 2012-11-30T10:41:06.377 回答