mod_alias 与 mod_rewrite 优先级
Posted
技术标签:
【中文标题】mod_alias 与 mod_rewrite 优先级【英文标题】:mod_alias vs mod_rewrite precedence 【发布时间】:2016-10-15 06:16:47 【问题描述】:我有一个使用 mod_alias 的 Redirect
指令和 mod_rewrite 的 RewriteRule 的 apache 配置文件。
据我了解,mod_alias 按文件从上到下的顺序工作,而 mod_rewrite 则相反,匹配最后一条规则,除非您以 [L] 标志终止。
我的问题是,我的Redirect
规则位于 RewriteRule 之上,但 RewriteRule 似乎仍在应用中,所以我最终将所有人重定向到同一个 url。
我想要实现的是将某些位置重定向到另一个网络服务器,并使用 mod-rewrite 进行包罗万象,因此 sn-p 看起来像这样
<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]
另外,如果它们在块内部或外部,它们的行为会有所不同吗?
【问题讨论】:
【参考方案1】:你必须在重写规则之后编写重定向规则,因为它会首先检查它必须遵循的重写规则,然后是重定向规则。
<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_rewrite 优先于 mod_alias,对吗? 是 mod_rewrite 优先于 mod_alias。以上是关于mod_alias 与 mod_rewrite 优先级的主要内容,如果未能解决你的问题,请参考以下文章
Apache mod_alias RedirectMatch 除特定模式外的所有内容
mod_rewrite 不在 XAMPP 上执行特定重定向 - 与 DirectoryIndex 冲突?
将 mod_rewrite 与 XAMPP 和 windows 7 - 64 位一起使用?
如何将 mod_rewrite 与 Apache -> mod_jk -> tomcat 设置一起使用?
Apache Rewrite(mod_rewrite)无法重写,如果目录名与root下的另一个目录相同,例如Linux上的“lib”