İstenmeyen mod_rewrite davranış

3 Cevap php

Ben sadece ubuntu üzerinde taze bir lamba yüklemek yığını yaptım ve benim varsayılan web sitesi için mod_rewrite modülü sağladı. Bütün sorgu dizesi bir değişkeninde tutulur ne ben istiyorum, Drupal sorguları için benzer bir şeydir. Bu amaçla aşağıdaki mod_rewrite kod kullanılabilir:

RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

The problem begins when some a string starts with the name of the file already existing in the directory; For example if I open a page: http://localhost/home/blablabla - the contents of $_GET are as follows:

Array ( [q] => home.php )

Ne görmek istiyorum:

Array ( [q] => home/blablabla )

Ben varsayılan web sitesi veya mod_rewrite yapılandırması ile bir şey olduğunu düşünüyorum, ama ben sadece bunu çözemedim ...

3 Cevap

Sen home.php dışlamak zorunda:

RewriteCond %{REQUEST_URI} !^/home\.php$
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

Yoksa var olan her dosya hariç:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ home.php?q=$1 [L,QSA]

Nedeni: L bayrak bir iç yönlendirme with the new rewritten URL. And the new URL home.php de ifade ile eşleşen ^(.*)$ neden olur.

Sorunuza değil exactly bir cevap, ama bu değil _SERVER ["REQUEST_URI"] ve _SERVER ["REDIRECT_URL"] için nelerdir?

Birden çok dizin başına yeniden yazar ile PATH_INFO atmak için son eklenen [DPI] bayrağı gerekebilir gibi görünüyor.