用htaccess重定向旧的丑陋链接到新的链接
问题描述:
我设法解决了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-mockup 和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
也导致重复的内容。
您必须选择一个方案与或没有尾斜杠。
看起来像你已经选择与,因为你有一个规则来添加尾部斜线(所以没关系,但你的规则没有尾部斜线现在是无用的)。
这是你的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
非常感谢伙计,虽然我不明白一半的代码,因为我是一个htaccess的小白,这正是我需要的!你很棒! – Damien 2014-08-27 20:23:32