(PHP ile) soru işaretleri ve 'işareti ile mod_rewrite

1 Cevap php

Ben Apache'nin mod_rewrite uygulamak çalışıyorum PHP tabanlı bir web uygulaması var.

Original URLs are of the form:
http://example.com/index.php?page=home&x=5

And I'd like to transform these into:
http://example.com/home?x=5

Sayfa adını yeniden ederken, ben de etkili soru işareti "hareketli" değilim unutmayın. Bunu yapmak için çalıştığınızda, Apache mutlulukla bu çevirisini gerçekleştirir:

RewriteRule ^/([a-z]+)\?(.+)$ /index.php?page=$1&$2  [NC,L]

Ama PHP $_GET değişkenleri işler karışıyor. Örneğin, bir çağrı http://example.com/home?x=88 verimleri sadece bir $_GET değişken (page => home). x => 88 Nereye gittin? Ancak, yerine bir soru işareti daha bir işareti kullanmak için kuralı değiştirdiğinizde:

RewriteRule ^/([a-z]+)&(.+)$ /index.php?page=$1&$2  [NC,L]

http://example.com/home&x=88 I (yani her iki page ve x $ _GET değişkenleri uygun şekilde ayarlanır) onu beklediğiniz gibi çalışır gibi bir çağrı.

Fark Biliyorum az, ama bunun mümkün olmadığını, bir soru işareti ile "start" Benim URL değişkenlerini istiyorum. Ben bu mod_rewrite yönlendirmeleri PHP ile nasıl etkileşimde benim kendi yanlış anlama yansıttığından emin değilim, ama (bir yol veya başka) bunu yapmak mümkün olmalıdır gibi görünüyor.

Thanks in advance!
Cheers,
-Chris

1 Cevap

Bu deneyin:.

RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^/([a-z]+)(?:$|\?(?:.+)) /index.php?page=$1 [NC,L,B,QSA,NE]

B (o [az] + eşleşen olduğundan gerekli olmamalı, ama daha sonra uzatmak istediğiniz durumda, bu yararlı olabilir) geribaşvuru kaçar.

EDIT: added RewriteCond. EDIT 2: QSA takes care of adding the ampersand.