Bir mod_rewrite RewriteRule kullanarak. Php uzantısı gerekmez tüm sorguları yeniden yazın

5 Cevap php

Ben gibi tüm sorguları istiyorum

http://mysite.com/something/otherthing?foo=bar&x=y

olarak yeniden yazılması gerekiyor

http://mysite.com/something/otherthing.php?foo=bar&x=y

Diğer bir deyişle, sadece evrensel,. Php uzantısı isteğe olun.

5 Cevap

Ben bunu bu şekilde yapardı. Dosya yoksa Temelde, buna. Php eklemeyi deneyin.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.php [QSA,L]

Eğer httpd.conf ve ne değiştirebilirsiniz, ayrıca koyabilirsiniz:

ForceType application/x-httpd-php

dosyasında PHP dosyaları olarak adlandırılır bütün yolları zorlar gibi. Bu da sorgu dizeleri ile çalışır düşünüyorum.

Bu çalışır:

RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^/?([^/\.]+)$ /$1.php [L]

Fikir, bir sorgu dizesi (soru işareti artı şeyler) orada emin olmaktır ve soru işaretinden önce malzeme bir uzantısı vardır ve eğer öyleyse,. Php append yüzden eğer kontrol ederseniz.

Uzantısı sadece yolları Maçlar:

RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php

Edit: Benim test, sorgu dizesi, otomatik geçti alır. Öyle değilse, bunun yerine kullanabilirsiniz:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1

Gibi bir şey ...

RewriteRule /something/(.+)?(.+) /something/$1.php?$2

muhtemelen işe.