Вопрос по regex, .htaccess, php, apache, mod-rewrite – Как я могу использовать .htaccess, чтобы скрыть расширения .php URL?

15

Я хочу что-то положить в мой.htaccess файл, который будет скрывать.php расширение файла для моих файлов php, поэтому при переходе на www.example.com/dir/somepage они будут отображаться www.example.com/dir/somepage.php.

Есть ли рабочее решение для этого? Мой сайт использует HTTPS, если это вообще имеет значение.

Это мой .htaccess на данный момент:

<code>RewriteEngine On

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

ErrorDocument 404 /error/404.php

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
</code>
Дубликат:stackoverflow.com/a/1760412/209139 TRiG

Ваш Ответ

4   ответа
2
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f       # if the requested URL is not a file that exists
RewriteCond %{REQUEST_FILENAME} !-d       # and it isn't a directory that exists either
RewriteCond %{REQUEST_FILENAME}\.php  -f  # but when you put ".php" on the end it is a file that exists
RewriteRule ^(.+)$ $1\.php [QSA]          # then serve that file (maintaining the query string)

</IfModule>

Как ни странно, этот код дал мне ошибки HTTP 500 при попытке в XAMPP в Windows. Удаление комментариев исправило это. То же самое можно сказать и о перемещении комментариев, чтобы они были в своих строках, а не в тех же строках, что и инструкции.

Странный. Меня устраивает.
Попробовал это, и это дает мне 500 ошибок. Markum
@Markum. С тех пор я обнаружил, что некоторые реализации не любят комментарии в тех же строках, что и код. Попробуйте удалить комментарии.
Была такая же проблема - удаление комментариев решило ее.
0

Попробуй это:

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]Try:

Ссылка:

Как скрыть расширение .php в .htaccess

Тогда попробуйте код выше.
До сих пор не работает. Markum
Это не работает для меня, к сожалению. Markum
4

Remove php extension

Вы можете использовать код в / .htaccess:

RewriteEngine on


RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [NC,L]

С помощью приведенного выше кода вы сможете получить доступ к /file.php как / file

Remove html extension

RewriteEngine on


RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_FILENAME}.html [NC,L]

Примечание: «переписатьEngine на» Директива должна использоваться один раз в верхней части для каждого доступа, поэтому, если вы хотите объединить эти 2 правила, просто удалите строку из второго правила. Вы также можете удалить любые другие расширения по вашему выбору, просто замените .php на них в коде.

Happy htaccessing!

38

Используйте этот код в вашем .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]
как вы можете исключить страницы? Это, кажется, мешает моему скрипту входа в систему, поэтому я хотел бы исключить эту страницу из этих переписываний
Спасибо, попробую. Я думаю, что происходит, когда страница перезагружается без расширения, она теряет переменные. Есть ли способ исправить это? Это как если бы он входил в систему дважды .... Я думаю ... один раз с электронной почтой и пройти, а затем снова без. так что я не могу войти
@anubhava Отлично, это сработало. Спасибо!
В общем можно добавитьRewriteCond %{REQUEST_URI} !^/(page1|page2) Тип условия.
@Arios: ДобавитьRewriteCond %{REQUEST_METHOD} !POST условие в первом правиле перенаправления, чтобы избежать перенаправления запросов POST.

Похожие вопросы