【问题标题】:301 Redirect vs Rewrite301重定向与重写
【发布时间】:2013-01-15 21:31:52
【问题描述】:

我有一个由其他人托管的网站,所有网页都是 .html 文件。我现在托管该站点并将其更改为 wordpress 站点。域没有改变,但显然所有页面都有。将所有 .html 页面重定向到主 url 的最佳方法是什么?

【问题讨论】:

    标签: .htaccess redirect rewrite


    【解决方案1】:

    .htaccess 中的301 Redirect 不需要 mod_rewrite 库。这是一种更简单的重定向方式,但它不具备使用重写规则所获得的灵活性和强大功能。如果您有一个带有显式 url 的 1-1 映射,您可以使用重定向:

    Redirect 301  /path/file.html http://new.site.com/newpath.php
    

    如果您尝试使用正则表达式对多个相似模式进行通配符匹配,则需要使用 Rewrite。

    RewriteRule ^(.*).html$ http://new.site.com/$1.php [R=301,NC,L]
    

    以下是这 2 种方法的一个很好的概述:http://www.ksl-consulting.co.uk/301-redirect-examples.html

    【讨论】:

    • 如果我想重定向 WWW 和非 WWW 版本怎么办?我可以在没有 RewriteRule 或 mod_rewrite 库的情况下执行此操作吗?
    • @Boris_yo 不,如果你想捕捉协议 http 和 https,你需要重写条件
    • 不是真正的协议,而是 WWW 和非 WWW
    • @Boris_yo 您无法使用 Redirect 捕获 domian / 主机名,只能使用带有 RewriteCondition 的 RewriteRule:RewriteCond %{HTTP_HOST} ^foo.com[nc]RewriteRule ^(.*)$ http://www.foo.com/$1 [r=301,nc]
    【解决方案2】:

    还有 RedirectMatch 也使用正则表达式对相似模式进行通配符匹配。选择取决于您需要做什么。

    重写是复杂的 - 学习曲线 - 但您可以提供替代网址,而无需提供 HTML 代码和看起来不可能的东西。但强大的功能带来了复杂性和大量错误。

    如果你只是做一个简单的重定向 - 可能匹配一些 url - 重定向是要走的路。

    当您无法使用 Redirect 时,您可能想开始学习 Mod_Rewrite。

    【讨论】: