2016-06-14 50 views
0

我有一个Apache的配置文件利用两个mod_alias中的Redirect指令和mod_rewrite的的重写规则的。mod_alias中VS mod_rewrite的优先

从我的理解,mod_alias中的作品在顶部到文件底部的顺序,并mod_rewrite的对面,最后一个规则匹配,除非你用[L]标志终止。

我的问题是,我的Redirect规则放在RewriteRule的上方,但RewriteRule似乎仍然被应用,所以我最终将每个人重定向到相同的URL。

我所试图实现的是重定向某些地方到另一个网络服务器,并有一个包罗万象的与国防部重写这样一个片段看起来像这样

<VirtualHost *:80> 
ServerName example.com 
Redirect permanent "/foo/bar/location1/" "https://example2.com/foo/baz/location1" 
Redirect permanent "/foo/bar/location2/abc" "https://example2.com/foo/baz/location2/def" 

RewriteEngine on 
RewriteRule ^.*$ "https://example2.com/catch-all/? [R=301, L] 

而且,做这些行为如果他们在一个街区内或外面,那么情况会不同吗

回答

0

你必须写重定向重写规则后的规则,因为它会首先检查它是什么必须遵循,然后重定向规则的重写规则。

<VirtualHost *:80> 
ServerName example.com 
RewriteEngine on 
RewriteRule ^.*$ "https://example2.com/catch-all/? [R=301, L] 
Redirect permanent "/foo/bar/location1/" "https://example2.com/foo/baz/location1" 
Redirect permanent "/foo/bar/location2/abc" "https://example2.com/foo/baz/location2/def" 
+0

然后这意味着mod_rewrite优先于mod_alias,是正确的吗? – darethas

+0

是mod_rewrite优先于mod_alias。 – karan