我在ManagedFusion设置文件(类似于.htaccess)中使用mod_rewrite,并且我想将所有传入请求转发到服务器上的另一个端口,除了几个文件夹。使用.htaccess和mod_rewrite重定向目录几个例外
到目前为止,我有这个(与文件夹的用户界面,形式,clientsystem和被忽略的小部件)
RewriteEngine On
RewriteCond %{REQUEST_URI} !ui$
RewriteCond %{REQUEST_URI} !forms$
RewriteCond %{REQUEST_URI} !clientsystem$
RewriteCond %{REQUEST_URI} !widgets$
RewriteRule ^/(.*) http://localhost:8050/$1 [P,L]
这种精细的工作,只要这些例外目录不存在,创建然而,当他们, rewriteengine只会再次触发,在这种情况下,它会匹配规则,因此最终转发给另一个端口。
我该如何解决这个问题?
另一个问题,如果我想要像'?file = bla'这样的查询也被转发,这是否会像这样工作?
编辑:这是我结束了:
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^ui
RewriteCond $1 !^forms
RewriteCond $1 !^clientsystem
RewriteCond $1 !^widgets
RewriteRule ^/?(.*) http://localhost:8050/$1?%1 [P,L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^ui
RewriteCond $1 !^forms
RewriteCond $1 !^clientsystem
RewriteCond $1 !^widgets
RewriteRule ^/?(.*) http://localhost:8050/$1 [P,R]
有些冗余,但它的作品。
关于rewriterule中的regexp备注:我认为你不需要首先/之后^。如果你想确定,追加?之后/所以它总是匹配,有或没有/作为第一个字符。 – 2010-06-02 12:29:50