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

时间:2014-08-27 19:30:12

标签: php apache .htaccess mod-rewrite redirect

我设法整理了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>

EG。 http://alienvalley.com/item.php?category=mockups&name=clean-browser-mockup 并且http://alienvalley.com/mockups/clean-browser-mockup/都在工作......如何让第一个重定向到第二个?

3 个答案:

答案 0 :(得分:1)

首先,这部分代码

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

也导致重复内容 您必须选择不带 尾随斜杠的方案。

您似乎已经选择了 ,因为您有一个添加尾部斜杠的规则(所以它没问题但是你的规则没有拖尾斜线现在没用了。)

以下是你的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] 

答案 1 :(得分:0)

尝试在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]

答案 2 :(得分:0)

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