Apache重写规则不希望应用于不同的目录
设置 我的设置是为两个或多个具有相似结构但内容不同的站点共享资源。例如Apache重写规则不希望应用于不同的目录,apache,mod-rewrite,Apache,Mod Rewrite,设置 我的设置是为两个或多个具有相似结构但内容不同的站点共享资源。例如 http:// localhost/site1/ http:// localhost/site2/ 重写规则旨在为共享资源添加异常。在示例中,脚本文件夹(当然还有其中的所有内容)被重写,以便 http:// localhost/scripts/ …可在…访问 http:// localhost/site1/scripts/ http:// localhost/site2/scripts/ 问题 尝试访问时 http:/
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/scripts/admin.js存在,并且您希望不重写访问现有文件(如脚本或图像)的URI,则可以尝试在重写规则之前添加以下内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.js$
或者,您也可以在重写规则之前添加以下内容,使脚本不会被重写:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.js$
以.js结尾的请求将无法满足该条件,并且将不应用该规则。或者,您可以专门将其缩小到admin\.js
或scripts/[^\.]+\.js
(替换条件中的\.js
)
那么我们可以限制规则的目录深度吗
如果你用
[^/]+
而不是*
的话,你可以这样做。我已经把这个问题通读了一遍,但我不明白你想达到什么目的。请给出一些应该重写的东西(以及它们应该变成什么)和不应该重写的东西的例子。localhost/site1/example.js被重写为localhost/scripts/example.js(正确)localhost/site1/admin.js被文章中的规则捕获并抛出HTTP 404。我认为,.*/可能应用于两个目录深度,而不是一个目录深度。那么我们可以限制规则的目录深度吗?重写cond%{REQUEST\u URI}!\。js$成功了,谢谢。如果您或任何其他人想要贡献,我仍然会接受目录深度限制;我们拥有的代码越多,就越有可能帮助其他人。