Apache重写异常不包括特定目录

时间:2011-11-29 12:45:35

标签: apache mod-rewrite

设置

我的设置是为两个或多个具有相似结构但不同内容的网站共享资源。例如......

http:// localhost / site1 /

http:// localhost / site2 /

有两种类型的重写,CMS内容(几乎只是回显到页面的内容)和特殊模块(例如博客软件模块),我有软件可以从数据库中更具体地处理内容

因此博客的第一个重写规则确保博客模块处理博客请求....

http:// localhost / site1 / blog / *

http:// localhost / site2 / blog / *

...使用位于...的博客模块软件

http:// localhost / blog /

CMS重写规则旨在处理非特定模块请求...

http:// localhost / site1 / *

http:// localhost / site2 / my_page.html *

...使用位于...的CMS重写软件

http:// localhost / rewrite.php

问题

博客模块和CMS模块重写是冲突的。我试图使用以下规则进行例外处理。这是我的代码......

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.js$
RewriteRule .*/blog(.+) blog$1 [QSA]
RewriteRule !.*/(admin|blog|forums)(.+)$ rewrite.php

最后一条规则实际上并不起作用。如果我访问这个代码..

http:// localhost / site1 / blog / *

http:// localhost / site2 / blog / *

...任何网站的任何博客(或管理员或论坛)网址仍在重写,以便与localhost / rewrite.php一起使用。

那么如何调整最后一条规则以满足以下条件呢...

1。)第一个目录(localhost / site1 / blog中的site1或site2)仍然是动态的,所以如果我愿意,我可以添加第三个站点,而不必因为任何原因重新调整代码。

2.)博客(或管理员或论坛)索引(例如blog /,forums /,admin /)由他们自己的模块以及这些目录中的任何内容处理(例如admin / 1,admin / test) .html)无论HTTP代码,200,404等等。

3.。)任何不在最后一个规则的例外列表中的URL都由rewrite.php处理(无论HTTP代码,200,404等)。

4。)localhost / site1 / blog /不由rewrite.php处理,localhost / site1 / random_path不由博客模块重写处理。

我很乐意快速回复任何进一步的澄清。

1 个答案:

答案 0 :(得分:6)

感谢早期的RewriteCond,有人写道,这是有道理的,我改编了它并且效果很好!

请注意,如果有人决定使用此代码,那么条件显然仅在模块(管理员,博客,论坛)的特定重写规则之后才能使用,尽管在CMS rewrite.php规则之前。

我很乐意接受任何积极的批评。

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|zip)$

RewriteRule .*/admin(.+) admin$1 [QSA]
RewriteRule .*/blog(.+) blog$1 [QSA]
RewriteRule .*/forums(.+) forums$1 [QSA]

#individual...
RewriteCond %{REQUEST_URI} !.*/admin
RewriteCond %{REQUEST_URI} !.*/blog
RewriteCond %{REQUEST_URI} !.*/forums

#condensed...
RewriteCond %{REQUEST_URI} !.*/(admin|blog|forums)

RewriteRule !\.(css|js|zip)$ rewrite.php