2010-07-23 22 views
8

Bu yeniden yazma kuralının nesi yanlış?GET parametrelerini koruyan RewriteRule

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

ben sadece istiyorum "index.php? Url =" API sonra eklenen ve/get parametreleri geri kalanından önce edilecek.

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

için

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

API sonra her şeyi elde etmek (. +) Nesi var /?

+0

^api/([a-zA-Z0-9/_ \ & \ = \%] +) $ çalışır ancak åäöøæé gibi farklı dile özgü karakterlerle çalışmayacaktır ve bu nedenle ... Bu yüzden Bunun yerine^api /(.+)$ gibi çalışır. . satır sonu veya dize sonu dışında herhangi bir karakter anlamına gelmelidir, bu yüzden neden çalışmaz anlamıyorum. – Tirithen

+0

muhtemel iki kopyası [htaccess rewrite ile url parametrelerini koru] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

cevap

19

sadece URL'yi değil, sorgu parametrelerine yol kısmına karşı çalıştırılan RewriteRule üzerinde regex. Neyse ki mevcut sorgu parametrelerini korumak için [QSA] flag var.

+0

Harika! Bu benim problemlerimi çözdü! Tüm non-zA-Z0-9_ kodlamak için bir JS işlevi buldum. karakterler http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

Çok teşekkürler! –

+0

QSA beni kurtardı! Teşekkürler bayım! –

0

Sonsuz yinelemeyi durdurmak için bir şey mi yapıyorsunuz?

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

veya bazı eşdeğer

+0

Daha önce [L] 'ye sahibim ama hiçbir şey yapmıyor diffrence. Benim problemim, apache2'nin sadece get parametresinin [url] => index.php olduğunu, diğer tüm parametrelerin gittiğini ve url parametresinin 'image/upload' olması gerektiğini bildirmesidir. Bunun yerine^api/([a-zA-Z0-9/_] +) $ değerini kullandığımda, url parametresi 'image/upload' olur, ancak bunun yerine diğer tüm GET parametrelerini kaybederim. – Tirithen

+0

Ben bir yönlendirme yapmaya çalışmıyorum, sadece api/ve önce metin dizini almak için "index.php? Url =" ve geri kalan GET parametrelerinin geri kalanı – Tirithen

+0

korunur R = 301' burada çalışıyor mu? Bu sayfada, http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

Sana regex şeyler önce alan adınızı yazmalısınız düşünüyorum. Şunun gibi:

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