Apache mod_rewrite忽略了RewriteRule?

时间:2017-10-23 12:35:56

标签: apache .htaccess mod-rewrite

这个很奇怪。

我有两个网站用于同一个客户端。两个站点中都存在某些页面,并且他们不希望维护两个副本,因此我告诉Apache将站点A中的这些URL重定向到站点B中的对应站点。

我的.htaccess文件中有以下指令:

RewriteRule ^/?$ https://www.site-b.example.com/ [R=301,QSA,L]
RewriteRule ^privacy/?$ https://www.site-b.example.com/privacy-policy/ [R=301,QSA,L]
RewriteRule ^terms/?$ https://www.site-b.example.com/terms-conditions/ [R=301,QSA,L]
RewriteRule ^userguide/?$ https://www.site-b.example.com/user-guide/ [R=301,QSA,L]
RewriteRule ^abcdefg/?$ https://www.site-b.example.com/user-guide/ [R=301,QSA,L]

(我使用mod_rewrite的RewriteRule而不是mod_alias的Redirect / RedirectMatch是有充分理由的,我不会在这里烦你,足以说它必须是这样。)

奇怪的是,除了^userguide/?$之外,所有这些都有效。

  • 当我访问https://www.site-a.example.com/时,我被重定向到https://www.site-b.example.com/
  • 当我访问https://www.site-a.example.com/privacy时,我会被重定向到https://www.site-b.example.com/privacy-policy
  • 当我访问https://www.site-a.example.com/terms时,我被重定向到https://www.site-b.example.com/terms-conditions
  • 当我访问https://www.site-a.example.com/userguide时,没有重定向!
  • 当我访问https://www.site-a.example.com/abcdefg时,我被重定向到https://www.site-b.example.com/user-guide

到底发生了什么事? “userguide”是某种保留字还是mod_rewrite ??

1 个答案:

答案 0 :(得分:1)

添加(在顶部)以禁用MultiViews:

userguide.html

Apache docs on mod_negotiation描述了多视图选项启用时的功能:

  

如果   服务器接收/ some / dir / foo的请求和/ some / dir / foo没有   存在,然后服务器读取目录查找所有命名的文件   foo。*,并有效地伪造了一个类型地图,列出了所有这些   文件,为它们分配相同的媒体类型和内容编码   如果客户通过名字要求其中一个,那就会有。然后呢   选择最符合客户要求的,并返回   文档。

另一种可能性是删除{{1}}文件,如果它已经不再使用了。