Ben mod_rewrite ile yeni URL'ye eşleşen değişkenler geçirebilir miyim?

4 Cevap php

Oldukça PHP tecrübeli değilim ama (ben gerektiğini rağmen) oldukça mod_rewrite kullanmayın. Tek bir yeniden yazma kuralı ile birçok değişkenler geçmek mümkün olup olmadığını sormak istiyorum hepsi bu.

Örneğin, bu yeniden mümkündür:

localhost/test.php?id=1&name=test&var1=3

Bu içine:

localhost/mysupertest/

ve aynı zamanda farklı değerleri için aynı yeniden yazma kuralı kullanabilir?

localhost/test.php?id=5&name=another_name&var3=42

içine

localhost/mysupertest/

Ben Ajax, çerez, oturumu veya POST değişkenler kullanılarak yapılabilir biliyorum, ama gerçekten değişkenleri GET kullanmak istiyorum.

4 Cevap

Kesinlikle mümkün. Böyle bir şey yapacağını:

RewriteRule test.php\?(.*)$ mysupertest/

Bunu yaparsanız, ancak, size değişkenleri kaybedersiniz, o etkili hiçbir sorgu dizesi veri ile, localhost / mysupertest doğrudan erişen olarak aynı şey gibi. Belki bir REST tarzı url, değişkenleri tutmak istiyorsanız, onları yeniden geri-başvuruları kullanabilirsiniz. John belirtildiği gibi, bir geri-referans sadece parantez bir dizi ve bir sayısal sipariş düzeni bir değişken haline içlerinde maçları ne olursa olsun.

RewriteRule test.php\?id=(.*)&name=(.*)&var3=(.*)  mysupertest/$1/$2/$3

Yukarıdaki kurala, erişen test.php?id=567&name=test&var3=whatever erişme gibi aynı olurdu mysupertest/567/test/whatever

Senin için ne soruyorsun tam olarak emin değilim, ama muhtemelen itibaren '?' tüm URL parametrelerini ekleyeceği mod_rewrite için [QSA] seçeneğini kullanarak olmalıdır. Örneğin:

RewriteRule ^mysupertest/? test.php [QSA]

Daha fazla bilgi için this question bir göz atın.

Evet, bu mümkün. Eğer regex ifade ile eşleşen bir şey herhangi bir url olarak yeniden olabilir. Herzaman parantez () içinde senin regex dize parçası koymak, onu yeniden süre kullanılabilecek bir değişken haline gelir.

Sen gibi bir şey (sanırım) isteyeyim:

RewriteRule dnm.php \? Id = [0-9] + & name =. + & Var1 = [0-9] + mysupertest /

QUERY_STRING URI parçası değildir. Için belgelere RewriteRule:

Note: Query String

Eğer hostname, liman veya sorgu dizesi karşı maç istiyorsanız, bir RewriteCond %{HTTP_HOST}, %{SERVER_PORT}, ya da %{QUERY_STRING} ile kullanmak sırasıyla değişkenler.