【问题标题】:301 Redirects: Ignore Trailing Slashes and index.html301 重定向:忽略尾部斜杠和 index.html
【发布时间】:2013-10-24 16:54:16
【问题描述】:

我客户的现有网站使用的 URL 可以是以下任意一种组合:

site.com/canada/mountain_rail
site.com/canada/mountain_rail/
site.com/canada/mountain_rail/index.html
site.com/canada/mountain_rail/index.html/

任何 URL 可能(或可能不)有斜杠,并且可能(或可能不)以 index.html 结尾。这有点像一场噩梦。

我正在尝试编写一个 301 重定向,它可以采用其中任何一个字符串并重定向到他们新网站上的不同页面。我到目前为止是这样的:

RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^canada/mountain_rail$ /canada/mountain-rail-vacations? [R=301,NE,NC,L]

这适用于像 site.com/canada/mountain_rail 这样的 URL,但 site.com/canada/mountain_rail/site.com/canada/mountain_rail/index.html 不起作用,只会返回 404。

有人可以帮忙吗?我是重写规则的初学者。

谢谢!

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect http-status-code-301


    【解决方案1】:

    使尾部斜杠可选:

    RewriteCond %{QUERY_STRING}  ^$
    RewriteRule ^canada/mountain_rail(?:/index\.html)?/?$ /canada/mountain-rail-vacations? [R=301,NE,NC,L]
    

    【讨论】:

    • 谢谢@anubhava。如果有人想访问canada/mountain_rail,但canada/ 的重写规则在.htaccess 的上方,会发生什么?它会重定向到第一条规则,因为那是首先“满足”吗?希望这是有道理的......
    • 重写规则应该匹配^canada/?$ 模式然后顺序无关紧要。
    • 谢谢。您的答案非常适合我问题中的前 3 个 URL,但第四个(site.com/canada/mountain_rail/index.html/ - index.html 和尾部斜杠) - 失败。有解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多