htaccess的问题GET在重写的url中形成变量

时间:2011-06-09 12:40:45

标签: regex .htaccess mod-rewrite url-rewriting get

基本上我的问题是这样的;我有一个MVC系统,将所有请求重定向到我的网站上的index.php。我在htaccess文件中有一个重写规则来处理这些请求:

RewriteRule ^([a-zAZ\_\-]+)\/([a-zA-Z\_\-]+)\/([^\/?]*) /?module=$1&class=$2&event=$3

将网址翻译成这些类型的网址

http://example.com/users/login/
http://example.com/users/info/me

我的问题是我还希望在URL中应用和使用GET变量,如此

http://example.com/users/login/?var1=val1&var2=val2
http://example.com/users/info/me?var1=val2...

我写了两个不同的正则表达式,在我的工作台(expresso)中运行得非常好,我已经在PHP中测试了它们,但是他们拒绝在htaccess中工作。它们并不是特别复杂,我试过了:

^([a-zAZ_\-]+)\/([a-zA-Z_\-]+)\/([^\/\?]*)[\?]*(.*) /?module=$1&class=$2&event=$3&$4
and
^([a-zAZ_\-]+)\/([a-zA-Z_\-]+)\/([^\/\?]*)(?(?=\?)\?(.+)) /?module=$1&class=$2&event=$3&$4

这些都不起作用,我绞尽脑汁为什么。基本上它只是不识别第四组并且没有返回任何我认为它可能是因为它在一个&符号旁边但是我做了& var = $ 4作为测试并且它仍然倒下。

对此的任何帮助都将非常感激,因为这让我感到疯狂。

提前致谢, 鲁珀特S。

1 个答案:

答案 0 :(得分:3)

毕竟,这就是你需要的:

RewriteRule ^([a-z_-]+)/([a-z_-]+)/([^/?]*) /?module=$1&class=$2&event=$3 [QSA,NC,L]

[QSA]会将其他GET参数附加到重写的查询字符串。

[NC]因为它不区分大小写,所以不需要A-Z匹配