如果php URL有参数,是否使用重写规则重定向URL?

如果php URL有参数,是否使用重写规则重定向URL?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我正在尝试使用.htaccess中的重写规则将用户从旧链接带到临时新链接(它不是永久性的新站点,所以我不希望301重定向) 以下内容适用于所有html页面,也适用于不带参数的php页面,但它不处理最后一个示例—带参数的php页面。请注意,新域上的目录结构不同,但url的参数完全相同。我可以用正则表达式做些什么来重写规则吗?我没有太多的经验编写自己的reg表达式,所以我不知道从哪里开始。谢谢 我的.htaccess文件: AddType x-mapp-php5 .php AddHandler x-

我正在尝试使用.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 
谢谢,
Jen

任何GET参数都存储在

%{QUERY_STRING}
您应该能够将其添加到重定向URL中

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

但是如果你不想要301,为什么你要指出一个完整的URL?我认为这样你就可以执行301。为什么不直接使用
/2010/view.php….

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

RewriteCond %{QUERY_STRING} d=(.+)
然后您需要以
%n
的形式使用RewriteCond backreference:

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

嗯。你的意思是:重写规则子页面/view.php?%{QUERY_STRING}{QUERY_STRING}我指的是完整的url,因为新页面位于不同的域上。啊,好吧。但是如果您使用完整的
http://
URL,我可以99%肯定Apache会自动将其设置为
301
,而不是内部重定向。不过,如果同一个域在同一台服务器上进行管理,我可能是错的——试试看浏览器的功能。我认为你实际上是对的,但我想不管是外部重定向还是内部重定向,我更关注的是如何捕获GET参数并使用它们来确定重定向到哪个url。我试着使用%{QUERY_STRING},但它不起作用-它应该按照实际获取的参数,还是代替?它应该像我写的那样工作,添加一个
&
,然后添加
%{QUERY_STRING}
,我正是以这种方式在许多网站上成功地使用了它(虽然前面没有http://图标,但这不会有什么区别)。发生了什么?哪些参数被传递,哪些参数没有传递?请注意:RewriteRule的第一个参数是一个正则表达式,它根据不包含查询字符串的URL路径进行检查。非常感谢。您不知道我在解决这个看似简单的重定向问题时浪费了多少时间。