Скрыть расширение php, принудительно установить косую черту в конце - общий вопрос, всегда дерьмовый ответ. Скажите, правильно ли я понял

Ненавижу задавать этот вопрос, потому что его задавали миллион раз, но ответы никогда не кажутся удовлетворительными, и большинство обсуждений кажется заброшенным без принятого ответа.

Вот именно то, что я необходимо сделать (неправильные URL-адреса преднамеренно из-за низкой кармы):

http://example.com/file.php перенаправляет на http://example.com/file/

http : //example.com/file также должен перенаправлять на http://example.com/file/

http://example.com/asdfsadf и http: / / examplecom / file / asdfasdf должен перейти на страницу 404

Вот магия htaccess, которую я собрал из сообщений здесь и в других местах. Кажется, это работает (в отличие от большинства заброшенных тем по теме, где всегда наблюдается какое-то странное поведение).

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.php -f
 RewriteRule ^([^/]+)/$ $1.php
 RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
 RewriteRule (.*)$ /$1/ [R=301,L]
 RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/ 
 RewriteRule ^(([^/]+/)*[^.]+)\.php http://example.com/$1 [R=301,L]

Как я уже сказал, насколько я могу судить, это работает нормально даже с подкаталогами. Могут ли более знающие люди сказать мне, если я что-то упускаю. Можно ли его улучшить или сократить?

Что бы это ни стоило, я также удаляю www:

 RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
 RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

Кажется, все работает нормально. Он включен после других частей. Это лучший заказ?

Спасибо всем, я надеюсь, что мы сможем получить хороший и надежный ответ на этот вопрос, потому что есть много плохих.

6
задан Tomasz Kowalczyk 7 June 2011 в 01:38
поделиться