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

#.htaccess #mod-rewrite #redirect

#.htaccess #mod-переписать #перенаправление

Вопрос:

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

Вот именно то, что мне нужно сделать (неправильные 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]
  

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

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

Комментарии:

1. 1 для его улучшения может быть написано небольшое объяснение NC, L, R и других параметров, чтобы ppl мог скопировать его после понимания логики!

2. Вот тут-то и приходят более умные люди. Хотел бы я знать, что означают эти флаги. Что касается недостатков, это касается только одного подкаталога в глубину, так что example.com/herp/derp.php переходит в example.com/herp/derp/, но example.com/herp/derp/foo.php не работает. Я думаю, что строка 4 актуальна, и ее, вероятно, можно было бы расширить здесь, но, возможно, есть способ добавить бесконечность (или, по крайней мере, намного больше) программно, вместо того, чтобы вручную указывать ей углубляться. Подскажите умным людям…

3. Одна из лучших вещей, которые могли бы произойти, — это если бы умный человек тщательно прокомментировал это.

4. когда вы говорите «перенаправлять», вы действительно имеете в виду отправку перенаправления с косой чертой в конце или вы имеете в виду file.php это реальный файл, и вы хотите, чтобы URL-адрес выглядел как имеющий косую черту в конце, и пользователь получит содержимое file.php?

Ответ №1:

О, у меня есть ответ на этот вопрос! Этот небольшой фрагмент перезаписи для перехода .htaccess удалит расширение из любого файла, который вы укажете в его URL.

 RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteBase /
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://yourdomain.com/$1/ [L,R=301]
  

Просто вставьте это внизу вашего файла .htaccess в вашем корневом каталоге. Файл скрыт, поэтому убедитесь, что «показывать скрытые файлы» включено в вашем ftp. ETA: последние 3 строки должны добавлять косую черту в конце ко всем файлам в yourcomain.com Не забудьте заменить youdomain.com правильно.

Это удалит ‘.php’ из всех ваших URL-адресов к файлам php! ^_^ Надеюсь, я помог

Комментарии:

1. Но есть дополнительные требования — добавьте косую черту в конце.

2. Похоже, это также переписывает запросы в CSS.