2014-08-27 100 views
2

我设法解决了htaccess中的链接,现在我所有的链接都看起来很好。但是,旧的“&类别?项目”链接仍然存在。 我想将这些重定向到新的,以避免被搜索引擎视为重复的内容。用htaccess重定向旧的丑陋链接到新的链接

这里是的.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-mockuphttp://alienvalley.com/mockups/clean-browser-mockup/都工作...我如何得到第一个重定向到第二个?

回答

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] 
+2

非常感谢伙计,虽然我不明白一半的代码,因为我是一个htaccess的小白,这正是我需要的!你很棒! – Damien 2014-08-27 20:23:32

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] 
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