【问题标题】:htaccess page to page redirect and seo friendly urlshtaccess 页面到页面重定向和 seo 友好的 url
【发布时间】:2014-04-09 14:00:35
【问题描述】:

我的 htaccess 文件有问题,我不知道是什么问题。

该网站已针对 seo 目的进行 url 重写,因此:

www.website.com/page/seo-friendly-url

被改写为

www.website.com/page.php?seo=seo-friendly-url

这是通过以下方式完成的

RewriteEngine on
RewriteBase /
Rewriterule ^page/([a-zA-Z0-9_-]+)$ page.php?seo=$1 [NC,L]

现在的问题是我必须将一些已经被搜索引擎索引的页面重定向到他们的新目的地,因为它们不再可用,例如:

www.website.com/page/seo-friendly-url

必须重定向到

www.website.com/page/another-seo-friendly-url

我尝试过类似的方法,但它不起作用

Rewriterule ^page/seo-friendly-url$ page/another-seo-friendly-url [R,NC,L]

这个也不行

Rewriterule ^page/seo-friendly-url$ page.php?seo=another-seo-friendly-url [R,NC,L]

这似乎很愚蠢,但我找不到问题:-/

感谢您的帮助 埃玛


编辑,对于anubhava:

嗨, 不,我已经为此设置了重写。 我想要实现的是重定向一个已经重写的链接。

让我更好地解释一下自己: 目前我有这个被谷歌(或任何其他搜索引擎)以美化 url(seo 友好)的形式索引的 url。网址有这种形式:

www.website.com/page/seo-friendly-url

我已经在 htaccess 中设置了一个规则,所以之前的链接被重写并转到一个带有用于显示某些内容的查询字符串的 php 页面。 页面和查询是这样的形式:

www.website.com/page.php?seo=seo-friendly-url

所以基本上我使用第一个 url 的最后一部分作为第二个 url 的查询参数。

这是通过以下代码实现(并且有效)的:

RewriteEngine on
RewriteBase /
Rewriterule ^page/([a-zA-Z0-9_-]+)$ page.php?seo=$1 [NC,L]

到目前为止一切顺利。

现在我需要实现的是重定向这个已经被删除的url:

www.website.com/page/seo-friendly-url

进入新页面

www.website.com/page/another-seo-friendly-url

当然,同样的规则适用于这个新的 url (www.website.com/page/another-seo-friendly-url --> 已经改写为 --> www.website.com/page.php?seo =另一个-seo-friendly-url)

我需要做什么才能正确地重写?

谢谢

【问题讨论】:

    标签: apache .htaccess url mod-rewrite redirect


    【解决方案1】:

    在现有规则之前,您需要这条额外规则:

    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{THE_REQUEST} \s/+page\.php\?seo=([^\s&]+) [NC]
    RewriteRule ^ /page/%1? [R=301,L]
    
    Rewriterule ^page/([\w-]+)$ page.php?seo=$1 [NC,L,QSA]
    

    【讨论】:

    • 嗨,anubhava,我试过了,但没有用。这是你建议我做的吗? RewriteCond %{THE_REQUEST} \s/+page\.php\?seo=([^\s&]+) [NC] RewriteRule ^ /page/$1? [R=301,L] RewriteRule ^page/seo-friendly-url$ page/another-seo-friendly-url [R,NC,L]
    • 当我打开 /page.php?seo=seo-friendly-url 时,在我的根 .htaccess 中有这条规则,它变成了 /seo=seo-friendly-url,这不是你想要的吗?
    • 刚刚检查了您更新的问题。 seo-friendly-urlanother-seo-friendly-url 有什么关系?我的意思是你有很多这样的情况,需要将/page/foo 重定向到/page/bar,我可以知道这样做的原因吗?
    • 嗨 anubhava,seo-friendly-url 和 another-seo-friendly-url 不相关。它们都代表同一类别产品的页面。我有 10 个这样的页面。不多。
    • 所以您希望浏览器中的 URL 为 www.website.com/page/another-seo-friendly-url,而在内部将其重写为:page.php?seo=seo-friendly-url 或者您希望内部的 URL 为:page.php?seo=another-seo-friendly-url
    【解决方案2】:

    只需像这样添加重定向:

    RewriteRule page/seo-friendly-url /page/new-url [R=301,L]
    

    重要提示:由于您的重写中有 L 标志,此规则必须高于您现有的重写

    [L] 标志导致 mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理更多规则。

    http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l

    编辑 您希望重定向旧 URL 以避免重复内容(rewrite=internal,redirect=HTTP 301)

    【讨论】:

      【解决方案3】:

      也许您愿意接受从另一个方向思考的解决方案。

      我会尝试在应用程序中处理这个问题,而不是通过重写。现在 GET 参数 seo 在 page.php 中处理。以可以通过多个 seo 别名来识别一个产品的方式扩展它不是一个想法吗?如果一个产品必须从类似的产品中取出,那么将拥有这个别名(只需更改数据库中的一行)。

      由于我不知道您使用的是什么软件,所以这可能是不可能的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 2013-12-28
        • 2017-05-27
        • 2013-09-15
        相关资源
        最近更新 更多