2014-01-27 155 views
1

一直在阅读更多Q &关于StackOverflow中的这一点,似乎无法找到我需要的解决方案。.htaccess使用所有查询字符串重定向新URL

我有一个旧的网址,它有许多可能的查询字符串/参数附加到它(太多行逐行匹配)。我有一个新的网址,将处理这些请求,但需要301重定向到新的网址,任何/所有参数完好无损...

oldscript.php(许多参数组合可以附加到入站网址) newscript.php(追加?和任何参数与oldscript.php一起发现)

这一定比我做的更容易,但所有的例子都有我一次一个修剪参数,有超过20可能是包括任何顺序或组合或没有。

寻找apache .htaccess方式将入站访问者静默重定向到新脚本,并将任何/所有查询参数传递给新脚本。

谢谢大师...

注:我做了一个快速和肮脏的PHP MOD的oldscript的顶部,但现在必须有一个更好的办法...

$params = explode('?',$_SERVER['REQUEST_URI']); 
header('Location: http://www.mysite.com/newscript.php?'.$params[1]) ; die; 

回答

2

一像这样的简单规则应该照顾:

RedirectMatch 301 "^/oldscript\.php$" /newscript.php 

请注意,任何现有的查询字符串都会自动转到新的URI。

+2

OMG ...真的。我又学到了新的东西。谢谢! – user409858

+0

有趣。这背后的管理逻辑是什么? 如果我们用'^'和'$'做一个正则表达式,那应该是开始和结束。相反,它是默认忽略查询参数?这是相当随意的,不完全透明或可预测的。 apache的RedirectMatch函数如何确定它是否是查询参数?它是通过检测一个'?'字符来实现的,并且之后忽略所有的字符?如果你确实想在查询参数上做正则表达式呢?你去哪里打开或关闭这个设置?这种复杂的,不透明的约定 – ahnbizcad

+0

要访问/编辑查询字符串,您需要使用基于'mod_rewrite'的规则而不是'RedirectMatch'。这里有很多使用'RewriteCond%{QUERY_STRING}'指令的例子。 – anubhava

相关问题