我设法整理了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/都在工作......如何让第一个重定向到第二个?
答案 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