2015-05-26 116 views
2

如果用户访问这个URL(http://domain.com/products/view-product.php?productID=21)浏览器,它应该显示的页面http://domain.com/new/view-product.php?pID=21如何重写包含参数的URL?

我曾尝试娄代码,但它不会工作,所以请帮我解决。

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{THE_REQUEST} products/view-product.php 
RewriteRule ^products/view-product.php?productID=21$ new/view-product.php?pID=21 [R=301,L] 

产品/视图product.php是物理存在于服务器上,我还是希望把它重写,我现在已经设计了新的一页。

+0

[URL重写GET参数]可能的重复(http://stackoverflow.com/questions/18162686/url-rewrite-get-parameters) – umka

+0

@umka没有它的不重复...旧的URL和目录和文件是存在的,我仍然想重写它到新的url。 – rkaartikeyan

+0

看看网站,它会帮助你更多地了解RewriteRule的'https://www.addedbytes.com/ articles/for-beginners/url-rewriting-for-beginners /' – alexandreferris

回答

3

在重写规则中,您无法与查询字符串(?之后的所有内容)进行匹配。只有URI用于匹配该正则表达式。您需要使用条件:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{THE_REQUEST} products/view-product.php\?productID=21($|\ |&) 
RewriteRule ^products/view-product.php$ /new/view-product.php?pID=21 [R=301,L] 
+0

感谢您的快速回复.. 。它不工作... products/view-product.php在服务器中物理存在。 – rkaartikeyan

+0

@rkaartikeyan作品[完全适合我](http://i.stack.imgur.com/uhXQh.png) –

+0

虽然文件存在???? – rkaartikeyan

2

可以匹配使用RewriteCond%{QUERY_STRING}变量的查询字符串。查询字符串参数没有得到RewriteRule

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^productID=21$ 
RewriteRule ^products/view-product\.php$ /new/view-product.php?pID=21 [R=301,L] 

或者,如果你想重定向所有的productID的:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^productID=([0-9]+)$ 
RewriteRule ^products/view-product\.php$ /new/view-product.php?pID=%1 [R=301,L] 
+0

我试过了...它不工作... – rkaartikeyan

+0

尝试暂时禁用任何其他重写指令。 – umka

0

GET的的productID值,然后重定向到新的URL。