2010-07-23 59 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]