2010-07-23 58 views
8

这个重写规则有什么问题?保留GET参数的RewriteRule

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L] 

我只是想“index.php?url =”被添加到api /之后并且在get参数的其余部分之前。

api/image/upload&arg1=1&text=lorem+ipsum 

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum 

什么是错的(+),以获得API后一切/?

+0

^api /([a-zA-Z0-9/_ \&\ = \%] +)$可以工作,但不适用于不同的语言特定字符,例如åäöøæé等...这就是为什么我会像^ api /(.+)$改为工作。 。应该表示除换行符或字符串结尾之外的任何字符,所以我不明白为什么它不起作用。 – Tirithen 2010-07-23 19:50:44

+0

[保留url参数与htaccess重写]可能的重复(http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) – 2013-01-13 05:02:20

回答

19

RewriteRule上的正则表达式仅针对URL的路径部分而不是查询参数运行。幸运的是,[QSA] flag可以保留现有的查询参数。

+0

太棒了!这解决了我的问题!我也找到了一个JS函数来对所有非a-zA-Z0-9_进行网址编码。字符http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen 2010-07-23 20:12:19

+0

非常感谢! – 2015-06-02 12:30:23

+0

QSA救了我!谢谢你,先生! – 2017-06-10 18:20:31

0

你在做什么来阻止无限递归吗?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L] 

或某些等效

+0

我有[L]之前,但它不会做任何diffrence。我的问题是,apache2报告,唯一的get参数是[url] => index.php,所有其他参数都消失了,url参数应该是'image/upload'。当我使用规则^ api /([a-zA-Z0-9/_] +)$时,url参数是'image/upload',但是我放弃了所有其他GET参数。 – Tirithen 2010-07-23 19:43:03

+0

我是allso没有试图做一个重定向,只是得到之间的文本之间的api /和第一个&得到的字符串前缀“index.php?url =”和其余的GET参数保存 – Tirithen 2010-07-23 19:46:11

+0

如何' R = 301'在这里工作?它不在http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html – 2011-08-16 08:21:08

0

我想你一定正则表达式东西之前写你的域名。像这样:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L]