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

Php 使用htaccess将旧的丑陋链接重定向到新链接,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,我设法在htaccess中整理了链接,现在我所有的链接看起来都很好。但是,旧的“&category?item”链接仍然存在。 我想将这些内容重定向到新的内容,以避免被搜索引擎视为重复内容 以下是我目前拥有的.htaccess代码(它运行良好) ErrorDocument 404/404.php 选项-索引 重新启动发动机 重写基/ 重写条件%{HTTP_HOST}^www\.(.*)$[NC] 重写规则^(.*)$http://%1/$1[R=301,L] 重写cond%{REQUEST_FIL

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

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

ErrorDocument 404/404.php
选项-索引
重新启动发动机
重写基/
重写条件%{HTTP_HOST}^www\.(.*)$[NC]
重写规则^(.*)$http://%1/$1[R=301,L]
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*[^/])$http://%{http_HOST}/$1/[L,R=301]
重写规则^([a-zA-Z0-9\-]+)$index.php?类别=$1
重写规则^([a-zA-Z0-9\-]+)/$index.php?类别=$1
重写规则^([a-zA-Z0-9\-]+)/([0-9]+)$index.php?类别=$1,页面=$2
重写规则^([a-zA-Z0-9\-]+)/([0-9]+)/$index.php?类别=$1,页面=$2
重写规则^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)$item.php?类别=$1,名称=$2
重写规则^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/$item.php?类别=$1,名称=$2
重写规则^download/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)$download.php?类别=$1,名称=$2
重写规则^download/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/$download.php?类别=$1,名称=$2
例如。
而且都在工作。。。如何使第一个重定向到第二个?

请尝试将其添加到
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]
这将重定向任何确实存在文件或目录的url

http://alienvalley.com/default/clean-browser/ 
也将重定向到

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

首先,这部分代码

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] 

非常感谢,伙计,虽然我不懂一半的代码,因为我是一个htaccess noob,这正是我需要的!你太棒了!
RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?category=$1
RewriteRule ^([a-zA-Z0-9\-]+)/$ index.php?category=$1
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]