【发布时间】:2011-11-29 12:12:43
【问题描述】:
设置
我的设置是为两个或多个具有相似结构但内容不同的站点共享资源。例如...
http:// localhost/site1/
http:// localhost/site2/
重写规则旨在为共享资源添加例外。例如,脚本文件夹(当然还有其中的所有内容)都被重写了......
http:// localhost/scripts/
...可在...访问
http:// localhost/site1/scripts/
http:// localhost/site2/scripts/
问题
尝试访问时...
http:// localhost/site1/scripts/admin.js
...以下重写通过当前规则应用并尝试将其重写到管理目录...
RewriteEngine on
RewriteRule .*/admin(.+) admin$1 [QSA] #Messes with scripts/admin.js
我认为这是一个目录深度问题,其中规则 .*/ 不仅可以应用于第一个目录 (site1/),而且本质上(并且不希望地)适用于所有目录深度(例如 depth1/depth2/depth3/等)。
期望的结果
如何调整这条规则,以便...
- 管理索引 (site1/admin/) 受此规则限制。
- 此规则忽略管理 JavaScript 文件 (site1/scripts/admin.js)。
- 我们保留规则的动态起始位 (RewriteRule .*/admin),因此无论使用的目录名称如何,Apache 都将继续自动正常工作或,我们可以将其修改为具有相同的效果,但最终结果是它必须保持动态。
- 我没有重命名 admin.js,因为它很便宜,因此我不会从中学习。
【问题讨论】:
-
我已经阅读了这个问题,但我无法理解您想要达到的目标。请举例说明应该重写的东西(以及它们应该变成什么)和不应该重写的东西。
-
localhost/site1/example.js 被重写为 localhost/scripts/example.js(正确)
-
localhost/site1/admin.js 被帖子中的规则捕获并抛出 HTTP 404。我认为因为 .*/ 可能适用于两个目录深度而不是仅一个目录深度。那么我们可以限制规则的目录深度吗?
标签: apache mod-rewrite