htaccess将查询字符串添加到301重定向

时间:2012-10-15 22:54:56

标签: .htaccess redirect

sombody可以帮助我解决这个问题,我试图使用htaccess文件重新定位页面,但它会不断添加?c=oldpage到新网址的末尾,例如:

http://www.mydomain.co.uk/newpage.html?c=oldpage

我已尝试过这里发布的一些解决方案,但没有运气,这是我的 .htaccess 文件:

DirectoryIndex index.php index.html index.htm    
Options +FollowSymLinks    
RewriteEngine on    
RewriteCond %{QUERY_STRING} PHPSESSID=.*$    
RewriteRule (.*) http://www.mydomain.co.uk/$1? [R=301,L]    
RewriteCond %{HTTP_HOST} ^mydomain.co.uk$ [NC]    
RewriteRule ^(.*)$ http://www.mydomain.co.uk/$1 [R=301,L]    
RewriteCond %{THE_REQUEST} /index\.php\ HTTP/    
RewriteRule ^index\.php$ / [R=301,L]    
RewriteEngine on    
RewriteRule ^product/(.*).html$ product.php?p=$1 [L]    
RewriteRule ^(.*)\.html$ category.php?c=$1 [L,NC]        

Redirect 301 /oldpage.html http://www.mydomain.co.uk/newpage.html    

ErrorDocument 404 /404.php

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是mod_alias(Redirect指令)和mod_rewrite彼此不能很好地协作。因为两个模块都在URL文件映射管道中的相同URI上应用它们的指令,所以它们不知道彼此忽略,因为两个指令都不知道其他模块正在做什么。由于你的目标是重叠的,所以两个模块都在同一个URI上应用它们的指令,你会得到一个混合的结果。

在这种情况下你需要坚持使用mod_rewrite并将重定向移到内部重写之上:

DirectoryIndex index.php index.html index.htm    
Options +FollowSymLinks    
RewriteEngine on    

# redirects 
RewriteCond %{QUERY_STRING} PHPSESSID=.*$    
RewriteRule (.*) http://www.mydomain.co.uk/$1? [R=301,L]    

RewriteCond %{HTTP_HOST} ^mydomain.co.uk$ [NC]    
RewriteRule ^(.*)$ http://www.mydomain.co.uk/$1 [R=301,L]    

RewriteCond %{THE_REQUEST} /index\.php\ HTTP/    
RewriteRule ^index\.php$ / [R=301,L]    

RewriteRule ^oldpage.html$ http://www.mydomain.co.uk/newpage.html [R=301,L]

# internal rewrites
RewriteRule ^product/(.*).html$ product.php?p=$1 [L]    
RewriteRule ^(.*)\.html$ category.php?c=$1 [L,NC]        

ErrorDocument 404 /404.php

答案 1 :(得分:0)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.net$ [OR]
RewriteCond %{HTTP_HOST} ^www\.abc\.net$
RewriteRule ^example\.html$ "http\:\/\/abc\.net\/example\/" [R=301,L]
RewriteOptions inherit

到文件夹,或:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc\.net$ [OR]
RewriteCond %{HTTP_HOST} ^www\.abc\.net$
RewriteRule ^example\.html$ "http\:\/\/abc\.net\/example\.html$" [R=301,L]
RewriteOptions inherit

不太了解它,但它是我使用的,希望它有所帮助。