如何301使用htaccess重定向包含特定目录的任何URL

时间:2013-11-10 20:06:43

标签: .htaccess redirect url-redirection

简要背景:我们的知识库有大约200篇文章,尽管每篇文章都有各种各样的网址,这些网址都包含我们希望Google编制索引的规范链接。 Canonical链接工作正常但是发布了蜂鸟,google开始放弃许多常见问题解答中针对该文章提供的其他URL格式的规范链接。没有任何改变,网站的所有其他部分都正常工作。

我们将继续研究为什么会发生这种情况,但与此同时,最佳途径是将特定文章的所有网址301转换为所需(规范)网址。由于我们的htaccess文件中的其他内容,我们在尝试不同方法时根本没有成功。它最终会出现某种循环。

请允许我分享我们的要求,然后发布我们的htaccess,以便我们可以根据需要进行更改。

要求

强制所有网址不安全(将所有https重定向到带301的http) - 已经在htaccess中工作将非www重定向到www - 已经在htaccess中工作将包含特定控制器的任何URL重定向到静态URL - NOT WORKING

需要重复文章的例子

一篇特定文章可以包含多个网址

  • / KB /条/ AA-00333
  • / KB /条/ AA-00333/0 /
  • / KB /条/ AA-00333/0/1 /
  • /kb/article/AA-00333/0/article-title.html

我们希望任何包含AA-00333的网址都被重定向到http://www.xyzdomain.com/kb/article/AA-00333/0/article-title.html

我们可以手动为htaccess中的每个特定文章添加一个条目。

当前的HTACCESS

AddDefaultCharset UTF-8
DirectoryIndex index.php

#redirect articles
#RewriteEngine on
#RewriteRule .*AA-00333.* http://www.xyzdomain.com/kb/article/AA-00333/0/article-title.html [L,R=301]

#Redirect all secure to non secure https/http with 301
RewriteCond %{HTTPS} ^on$
RewriteRule ^(.*)$ http://www.xyzdomain.com/kb/$1 [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On 
# Redirect non-www to www:
RewriteCond %{HTTP_HOST} !^(www\.xyzdomain\.com)?$
RewriteRule ^(.*)$ http://www.xyzdomain.com/kb/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>
#

1 个答案:

答案 0 :(得分:0)

你需要这样的东西吗?

RewriteCond %{REQUEST_URI} !article-title\.html$
RewriteRule ^kb/article/AA-00333 http://www.xyzdomain.com/kb/article/AA-00333/0/article-title.html [L,R=301]

您所遇到的问题是目标网址也匹配正则表达式模式,因为它中还包含AA-00333,从而导致重定向循环。您注意到您希望将其重定向,但这会导致循环。