我想将带有可选参数的任何php页面重定向到新的干净网址
例如,从:account.php?id=156
到newurl/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和正则表达式与伏都教比较的地方时很有趣:)我们现在明白为什么
答案 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]