【问题标题】:htaccess redirect 301 url rewritehtaccess 重定向 301 url 重写
【发布时间】:2013-12-21 01:36:51
【问题描述】:

我们遇到了 .htacces 中的 url 重写和重定向 301

目前我们的网站只有一个文件 (index.php),它作为变量传递类别 ID,然后显示该类别的内容。

例如: 通过链接 www.oursite.com/index.php?CATID=4 调用类别 Nr 4,该链接显示类别“map-france”的内容 通过链接 www.oursite.com/index.php?CATID=5 调用类别 Nr 5,该链接显示类别“map-italy”的内容

我们总共有大约 800 个类别。

我们想重写 url,以便显示类别名称: 例如: www.oursite.com/map-france 而不是 www.oursite.com/index.php?CATID=4 www.oursite.com/map-italy 而不是 www.oursite.com/index.php?CATID=5

目前最好的办法是使用 .htacces 中的 mod_rewrite 函数

到目前为止,我们已经通过以下代码实现了这一目标:

RewriteEngine On
RewriteRule    ^map-france/?$    index.php?CATID=4    [NC,L]
RewriteRule    ^map-italy/?$    index.php?CATID=5    [NC,L]

这很好用。

为了避免来自搜索引擎的双重索引,我们还应该应用从旧网址到新网址的重定向 301。 我们设法使用以下代码做到了这一点:

RewriteCond %{QUERY_STRING} CATID=4
RewriteRule ^index\.php$  http://www.oursite.com/map-france/? [L,R=301]

RewriteCond %{QUERY_STRING} CATID=5
RewriteRule ^index\.php$  http://www.oursite.com/map-italy/? [L,R=301]

如果我们把所有东西放在一起,它就不起作用,而且似乎会产生一个永无止境的重定向循环

我们做错了什么?

非常感谢您的帮助:)

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting url-redirection


    【解决方案1】:

    尝试匹配请求而不是%{QUERY_STRING}

    RewriteCond %{THE_REQUEST} \?CATID=4
    RewriteRule ^index\.php$  http://www.oursite.com/map-france/? [L,R=301]
    
    RewriteCond %{THE_REQUEST} \?CATID=5
    RewriteRule ^index\.php$  http://www.oursite.com/map-italy/? [L,R=301]
    

    重写引擎循环直到 URI 停止更改,这意味着您的第一条规则添加了查询字符串,而您的第二条规则匹配了查询字符串并在没有查询字符串的情况下重定向到。然后浏览器再次发出相同的请求,并应用您的第一个规则,然后第二个规则与查询字符串匹配并重定向浏览器再次,等等。

    【讨论】:

    • 上面建议的解决方案仅适用于只有一位数字的 CATID。 CATID=24 被读取为 CATID=2 并被重定向到类别 2 我们如何解决这个问题?
    猜你喜欢
    • 2015-03-04
    • 2016-09-28
    • 2023-03-25
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多