使用htaccess将旧的丑陋链接重定向到新的链接


Redirect old ugly links to new ones with htaccess

我设法整理了htaccess中的链接,现在我的所有链接看起来都很好。但是,旧的"&category?item"链接仍然存在。我想将这些内容重定向到新的内容,以避免被搜索引擎视为重复内容。

这是我目前拥有的.htaccess代码(运行良好)

ErrorDocument 404 /404.php
Options -Indexes
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www'.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301]
    RewriteRule ^([a-zA-Z0-9'-]+)$ index.php?category=$1
    RewriteRule ^([a-zA-Z0-9'-]+)/$ index.php?category=$1
    RewriteRule ^([a-zA-Z0-9'-]+)/([0-9]+)$ index.php?category=$1&page=$2
    RewriteRule ^([a-zA-Z0-9'-]+)/([0-9]+)/$ index.php?category=$1&page=$2
    RewriteRule ^([a-zA-Z0-9'-]+)/([a-zA-Z0-9'-]+)$ item.php?category=$1&name=$2
    RewriteRule ^([a-zA-Z0-9'-]+)/([a-zA-Z0-9'-]+)/$ item.php?category=$1&name=$2
    RewriteRule ^download/([a-zA-Z0-9'-]+)/([a-zA-Z0-9'-]+)$ download.php?category=$1&name=$2
    RewriteRule ^download/([a-zA-Z0-9'-]+)/([a-zA-Z0-9'-]+)/$ download.php?category=$1&name=$2      
</IfModule>

例如。http://alienvalley.com/item.php?category=mockups&name=清理浏览器模型和http://alienvalley.com/mockups/clean-browser-mockup/都在工作。。。如何将第一个重定向到第二个?

首先,这部分代码是

RewriteRule ^([a-zA-Z0-9'-]+)$ index.php?category=$1
RewriteRule ^([a-zA-Z0-9'-]+)/$ index.php?category=$1

也会导致重复的内容
您必须选择带有的方案或不带有尾部斜杠的<strong方案。>

看起来你已经选择了带有的,因为你有一个添加尾部斜杠的规则(所以没关系,但没有尾部斜杠的你的规则现在没用了)。

以下是你的htaccess看起来像的样子

ErrorDocument 404 /404.php
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www'.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} 's/index'.php'?category=([^&]+)&page=([0-9]+)'s [NC]
RewriteRule . %1/%2/? [R=301,L]
RewriteCond %{THE_REQUEST} 's/index'.php'?category=([^&'s]+)'s [NC]
RewriteRule . %1/? [R=301,L]
RewriteCond %{THE_REQUEST} 's/item'.php'?category=([^&]+)&name=([^&'s]+)'s [NC]
RewriteRule . %1/%2/? [R=301,L]
RewriteCond %{THE_REQUEST} 's/download'.php'?category=([^&]+)&name=([^&'s]+)'s [NC]
RewriteRule . download/%1/%2/? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+[^/])$ $1/ [R=301,L]
RewriteRule ^([^/]+)/$ index.php?category=$1 [L]
RewriteRule ^([^/]+)/([0-9]+)/$ index.php?category=$1&page=$2 [L]
RewriteRule ^([^/]+)/([^/]+)/$ item.php?category=$1&name=$2 [L]
RewriteRule ^download/([^/]+)/([^/]+)/$ download.php?category=$1&name=$2 [L] 

尝试将其添加到RewriteBase /行的正下方:

RewriteCond %{THE_REQUEST} ' /index'.php'?category=([^&' ]+)($|' )
RewriteRule ^ /%1/ [L,R=301]
RewriteCond %{THE_REQUEST} ' /index'.php'?category=([^&' ]+)&(?:page|name)=([^&' ]+)($|' )
RewriteRule ^ /%1/%2/ [L,R=301]
RewriteCond %{THE_REQUEST} ' /download'.php'?category=([^&' ]+)&name=([^&' ]+)($|' )
RewriteRule ^ /download/%1/%2/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)$ /item.php?category=$1&name=$2 [QSA,L]

这将重定向任何存在的文件或目录的url

http://alienvalley.com/default/clean-browser/ 

也将重定向到

http://alienvalley.com/item.php?category=default&name=clean-browser