【问题标题】:Apache mod_rewrite ignoring a RewriteRule?Apache mod_rewrite 忽略 RewriteRule?
【发布时间】:2018-04-04 00:19:54
【问题描述】:

这个很奇怪。

我有两个网站供同一个客户使用。某些页面存在于两个站点中,他们不想维护两个副本,所以我告诉 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

这到底是怎么回事? “用户指南”是 mod_rewrite 的某种保留字吗??

【问题讨论】:

  • 您有页面userguide.php 或目录userguide 吗?其他的也一样吗?
  • 感谢@Croises - 是的,它是 userguide.html。我一定误解了 mod_rewrite 指令的优先顺序 - 在配置的其他地方有一条规则说现有文件和目录可以免于进一步重写/重定向,但我认为我的规则会首先得到处理。可能不会!如果您将评论添加为答案,我可以给它打勾并给予应得的支持:)

标签: apache .htaccess mod-rewrite


【解决方案1】:

添加(在顶部)以禁用多视图:

Options -MultiViews

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

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

另一种可能性是删除userguide.html 文件,如果它不再真正使用的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多