htaccess:重定向到新的url问题

时间:2010-10-03 08:06:25

标签: .htaccess redirect

我想将带有可选参数的任何php页面重定向到新的干净网址

例如,从:account.php?id=156newurl/account/156

我正在使用以下重定向匹配

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)[\.php]?[\?]?[a-zA-Z_]?[=]?([0-9]+)?$ /cmstut/redirect/newurl/$1/$2/$3 [L]

但我得到的结果是它会重定向到newurl/account//?id=156

我认为当我读到htaccess和正则表达式与伏都教比较的地方时很有趣:)我们现在明白为什么

3 个答案:

答案 0 :(得分:2)

我不明白你的第三个子表达式在哪里。

$ 1:([a-zA-Z0-9_]+)
2美元:([0-9]+)
3美元:MIA

我可以推荐更像这样的东西吗? /cmstut/([A-Za-z0-9]+)\.php(\??id=([0-9]+))? 那么您可能必须使用$ 3来访问ID号。你想要整个参数是可选的,对吧?

答案 1 :(得分:1)

之前我从未在.htaccess中使用过URL重定向,但如果它是普通的正则表达式,那么这应该可行:

RedirectMatch ^/cmstut/([a-zA-Z0-9_]+)\.php(\?[a-zA-Z_]+=([0-9]+))?$ /cmstut/redirect/newurl/$1/$3 [L]

由于你对你想要的东西不太具体,我做了一些猜测。这会将foo.php?bar=123重定向到newurl/foo/123,并会忽略bar


编辑:考虑一下,为你重写你的正则表达式对你来说不会长期帮助你,除了你之外没有人可能确切知道你想要什么。我认为更好的行动方案是指向正则表达式指南。 Here是一个,它专门针对mod_rewrite。

答案 2 :(得分:0)

我终于找到了解决方案。我做了一些更多的研究,我使用了一种不同的方法,我相信它比我使用的方法更好

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^([A-Za-z0-9]+)\.php$ /cmstut/redirect/newurl/account/%1? [R=302,L]