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

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

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

2 голосов
/ 09 июня 2011

О, у меня есть ответ на этот вопрос! Этот небольшой фрагмент переписывания для входа в .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 файлы! ^ _ ^ Надеюсь, я помог

...