301重定向工作,重写用于重定向的规则不起作用

时间:2014-04-15 16:52:28

标签: php apache .htaccess mod-rewrite redirect

以下是我们的.htaccess文件。所有301重定向都可以正常工作。之后在文件中没有我们用于重定向的中间ReWriteRule工作。 store / locations.php的第一个重写规则非常简单,应该可以正常工作。

我确实认识到在那个简单的重写之后,所有其他的重写都包含一个“?”这可能需要我们做一些其他事情(即逃避“?”)。但我甚至无法让重写规则在简单的url上工作,所以想知道我们可能做错了什么。

有趣的是重写条件& .htaccess文件底部的重写规则确实可以正常工作(将任何非www url转换为www url)。

Redirect 301 /store/index.php http://www.pelleline.com
Redirect 301 /store/contact-us.php http://www.pelleline.com/contact-us.php
Redirect 301 /index.html http://www.pelleline.com
Redirect 301 /index.htm http://www.pelleline.com
Redirect 301 /store/index.html http://www.pelleline.com
Redirect 301 /store/index.htm http://www.pelleline.com

RewriteEngine on
RewriteRule ^store/locations.php?/?$ http://www.pelleline.com/locations.php [L,R=301]

RewriteRule ^store/product-list.php?a_testoni_shoes-pg1-cid46.html?/?$        
http://www.pelleline.com/a-testoni-shoes/cid-46-1.html [L,R=301]

RewriteRule ^store/product-list.php?alden_shoes-pg1-cid47.html?/?$     
http://www.pelleline.com/alden-shoes/cid-47-1.html [L,R=301]



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

ErrorDocument 404 /404.php

AddDefaultCharset UTF-8

1 个答案:

答案 0 :(得分:0)

您无法在重写规则中与查询字符串匹配,您需要在条件中使用%{QUERY_STRING} var:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^/?$
RewriteRule ^store/locations.php$ http://www.pelleline.com/locations.php [L,R=301]

RewriteCond %{QUERY_STRING} ^a_testoni_shoes-pg1-cid46.html?/?$
RewriteRule ^store/product-list.php$ http://www.pelleline.com/a-testoni-shoes/cid-46-1.html [L,R=301]

RewriteCond %{QUERY_STRING} ^alden_shoes-pg1-cid47.html?/?$
RewriteRule ^store/product-list.php$ http://www.pelleline.com/alden-shoes/cid-47-1.html [L,R=301]