2011-11-29 74 views
0

的设置阿帕奇重写规则不希望适用于不同的目录

我的设置是有有虽然不同的内容类似结构的两个或多个站点共享资源。在示例中...

http:// localhost/site1/ 
http:// localhost/site2/ 

重写规则旨在为共享资源添加例外。在示例脚本文件夹(和它里面当然一切)被改写所以...

http:// localhost/scripts/ 

...是...访问

http:// localhost/site1/scripts/ 
http:// localhost/site2/scripts/ 

的问题

当试图访问...

http:// localhost/site1/scripts/admin.js 

...下面再通过写入当前的规则适用,并试图将其改写为admin目录...

RewriteEngine on 
RewriteRule .*/admin(.+) admin$1 [QSA] #Messes with scripts/admin.js 

我认为这是一个目录深度的问题,治所在。* /可应用于多个第一目录(SITE1 /),并且固有地(并且不希望地)适用于所有目录深度(例如,深度1 /深度2 /深度3 /等)。

期望的结果

如何调整这个规则,使...

  1. 管理指数(SITE1 /管理/)此规则caputed。
  2. 此规则忽略管理JavaScript文件(site1/scripts/admin.js)。
  3. 我们保留规则(RewriteRule。*/admin)的动态起始位,所以无论使用的目录名称是否会继续自动工作我们可以修改它以获得相同的效果,但最终的结果是它必须保持动态。
  4. 我不重命名admin.js,因为它会便宜,因此我不会从中学习。
+0

我已经阅读了这个问题,我不明白你想达到什么目的。请举出一些应该重写的东西(以及它们应该成为的东西)以及不应该被重写的东西。 –

+0

localhost/site1/example.js被重写为localhost/scripts/example.js(正确) – John

+0

localhost/site1/admin.js被post中的规则捕获并抛出一个HTTP 404.我认为是因为。* /可能适用于TWO目录深度而不是只有一个目录深度。我们可以限制规则的目录深度吗? – John

回答

1

你可以尝试一些事情,具体取决于你如何工作。如果SITE1 /脚本/ admin.js存在,你想拥有的URI访问现有的文件(如脚本或图像)不被改写,你可以尝试重写规则之前加入这一权利:

RewriteCond %{REQUEST_FILENAME} !-f 

或者,你也可以只让这样的脚本将无法获得通过重写规则之前加入这一权利改写:

RewriteCond %{REQUEST_URI} !\.js$ 

请处理的.js最终将失败,该条件和规则将不会被应用。或者,您可以将其缩小为admin\.jsscripts/[^\.]+\.js(在条件中替换\.js)。


我们可以限制则该规则的目录深度?

你可以,如果你使用[^/]+而不是.*

+0

RewriteCond%{REQUEST_URI}!\。js $工作,谢谢。如果您或其他人愿意贡献,我仍然愿意接受目录深度限制;我们有更多的工作代码,这更有可能帮助其他人。 – John