2

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

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

谢谢你的帮助。

4

2 回答 2

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
于 2012-10-15T23:47:02.520 回答
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

不太了解,但我用的就是这个,希望对你有帮助。

于 2012-10-15T23:07:24.433 回答