htaccess重写匹配问号

时间:2013-10-02 16:41:11

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

我需要有关重写规则和正则表达式的帮助

这是我输入的网址

http://localhost/ws/rest/user/login?login=user_login&password=user_pass

我希望它重定向到此

http://localhost/index.php?type=rest&ressource=user&action=login&login=user_login&password=user_pass

我的重写规则

RewriteCond %{REQUEST_METHOD} ^(GET|POST)
RewriteRule ^ws/(.+)/(.+)/([A-Za-z]+)(\\?)(.+)?   index.php?type=$1&ressource=$2&action=$3&$5 [L]

我认为问题出在网址中的?附近,因为当我用&替换它时,它有效吗?

2 个答案:

答案 0 :(得分:3)

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^(GET|POST)
RewriteRule ^ws/([^/]+)/([^/]+)/([A-Za-z]+) index.php?type=$1&resource=$2&action=$3 [QSA,L]

注意QSA标志,以便将原始网址中的查询字符串附加到新网址。

答案 1 :(得分:1)

问题 QUERY_STRINGRewriteRule中未匹配。用以下代码替换您的代码:

RewriteCond %{QUERY_STRING} ^login=user_login&password=user_pass$ [NC]
RewriteRule ^ws/([^/]+)/([^/]+)/([a-z]+)/?$ /index.php?type=$1&ressource=$2&action=$3 [L,QSA,NC]

由于此处使用了QUERY_STRING标记,您现有的QSA会附加到生成的URI中。

在此处阅读更多相关信息:Apache mod_rewrite Introduction