如何重写包含参数的URL?

时间:2015-05-26 20:37:04

标签: php .htaccess

如果用户在浏览器中访问此网址(http://domain.com/products/view-product.php?productID=21),则应显示页面http://domain.com/new/view-product.php?pID=21

我尝试了以下代码,但它无法正常工作,所以请帮我解决。

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]

产品/ view-product.php实际存在于服务器中,我仍想将其重写为我现在设计的新页面。

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

您可以使用%{QUERY_STRING}RewriteRule变量匹配查询字符串。查询字符串参数没有到达RewriteEngine on RewriteCond %{QUERY_STRING} ^productID=21$ RewriteRule ^products/view-product\.php$ /new/view-product.php?pID=21 [R=301,L]

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

或者,如果您想重定向所有productID'

hduser@localhost:/usr/local/hadoop/etc/hadoop$ yarn node -list
15/05/27 07:23:54 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.111.72:8040
Total Nodes:2
         Node-Id         Node-State Node-Http-Address   Number-of-Running-Containers
localhost.localdomain:32991         RUNNING localhost.localdomain:8042                             0
localhost.localdomain:55352         RUNNING localhost.localdomain:8042                             0

答案 2 :(得分:0)

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