mod_alias 与 mod_rewrite 优先级
mod_alias vs mod_rewrite precedence
我有一个使用 mod_alias 的 Redirect
指令和 mod_rewrite 的 RewriteRule 的 apache 配置文件。
根据我的理解,mod_alias 按照文件从上到下的顺序工作,而 mod_rewrite 相反,匹配最后一条规则,除非你以 [L] 标志终止。
我的问题是,我的 Redirect
规则位于 RewriteRule 之上,但 RewriteRule 似乎仍在应用,所以我最终将所有人重定向到相同的 url.
我想要实现的是将某些位置重定向到另一个网络服务器,并使用 mod-rewrite 进行包罗万象,因此片段看起来像这样
<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]
此外,如果它们在块内或块外,它们的行为是否不同?
您必须在重写规则之后编写重定向规则,因为它会首先检查它必须遵循的重写规则是什么,然后是重定向规则。
<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"
我有一个使用 mod_alias 的 Redirect
指令和 mod_rewrite 的 RewriteRule 的 apache 配置文件。
根据我的理解,mod_alias 按照文件从上到下的顺序工作,而 mod_rewrite 相反,匹配最后一条规则,除非你以 [L] 标志终止。
我的问题是,我的 Redirect
规则位于 RewriteRule 之上,但 RewriteRule 似乎仍在应用,所以我最终将所有人重定向到相同的 url.
我想要实现的是将某些位置重定向到另一个网络服务器,并使用 mod-rewrite 进行包罗万象,因此片段看起来像这样
<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]
此外,如果它们在块内或块外,它们的行为是否不同?
您必须在重写规则之后编写重定向规则,因为它会首先检查它必须遵循的重写规则是什么,然后是重定向规则。
<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"