如果php url有参数,用RewriteRule重定向URL?

时间:2010-01-25 16:42:32

标签: php .htaccess mod-rewrite

我正在尝试在我的.htaccess中使用重写规则将用户从旧链接带到临时新链接(它不是永久性新网站,所以我不想要301重定向)

以下适用于所有html页面以及没有参数的php页面,但它不处理最后一个示例 - 带参数的php页面。请注意,新域上的目录结构不同,但url的参数完全相同。我可以使用正则表达式来执行重写吗?我没有太多编写自己的reg表达式的经验,所以我不知道从哪里开始。谢谢!

我的.htaccess文件:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
Options -MultiViews
Options +FollowSymlinks
RewriteEngine on
RewriteRule invest/index.html http://example.org/new_file_structure/invest/index.html
RewriteRule index-old.html http://example.org/index.php
RewriteRule invest/i2/ap/row_I2_i_ap1.php http://example.org/new_file_structure/i2/ap/row_I2_i_ap1.php

##The following doesn't work:
RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014 

谢谢, 仁

2 个答案:

答案 0 :(得分:5)

您需要使用RewriteCond来检测查询字符串:

RewriteCond %{QUERY_STRING} d=(.+)

然后你需要以%n的形式使用RewriteCond反向引用:

RewriteRule subpages/view.php$ http://example.org/2010/view.php?d=%1

答案 1 :(得分:1)

任何GET参数都存储在

%{QUERY_STRING}

您应该可以将其添加到重定向网址。

RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014&%{QUERY_STRING}

但如果您不想要301,为什么要指出完整的URL?我认为你强制执行 301的方式。为什么不使用/2010/view.php....