2008-10-08 16 views

Odpowiedz

6

Zrobiłbym to w ten sposób. Zasadniczo, jeśli plik nie istnieje, spróbuj dodać do niego .php.

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

To właśnie teraz robię. Idealny. Dzięki! – dreeves

+0

To oznacza, że ​​wykona RewriteRule, jeśli dostęp do zasobu nie jest plikiem lub katalogiem? – bafromca

0

Coś ...

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

prawdopodobnie działać.

+0

To nie działa. – dreeves

+0

Prawdopodobnie musisz uciec znakowi zapytania z ukośnikiem odwrotnym. –

+0

Próbowałem tego. Myślę, że ciąg zapytania nie jest częścią tego, co jest dopasowane w RewriteRule. Musisz zrobić oddzielny RewriteCond w ciągu zapytania. Zobacz moją odpowiedź. – dreeves

1

to działa:

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

Chodzi o to, aby upewnić się, że jest to ciąg zapytania (znak zapytania oraz rzeczy), a jeśli tak sprawdzić czy rzeczy przed znakiem zapytania nie ma rozszerzenia, a jeśli tak, dołączyć. php.

1

Jeśli można zmienić httpd.conf i co, można również umieścić:

ForceType application/x-httpd-php 

w pliku jako zmusi wszystkie ścieżki powołani, aby być pliki PHP. Myślę, że działa to również z ciągami zapytań.

0

zestawienia tylko ścieżki bez rozszerzenia:

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

Edit: W moich testów, ciąg zapytania zostanie przekazana automatycznie. Jeśli nie, możesz użyć tego:

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

'[QSA, L]' przekazuje ciąg zapytania ('L' oznacza, że ​​nie przetwarzaj reguł po tym). – NateS