Я недавно обновил свой .htaccess файл, чтобы скрыть расширение .php URL-адресов. Это прекрасно работает, когда я пытаюсь достичь domain.com/index, он отображает файл php.
Когда я печатаю domain.com/index.php он перенаправляет меня на domain.com/index url, а также отображает файл .php.
Я хотел бы перенаправить все другие расширения на URL-адрес без расширения, чтобы отобразить файл .php из соображений безопасности. Моя проблема в том, что я не могу настроить свой .htaccess для перенаправления хорошо известных расширений, таких как .html .asp. aspx .shtml и т. д. на URL без расширения и отобразить файл .php в качестве содержимого.
Мой файл .htaccess выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# php extension to no extension url
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]
# no extension to the .php file
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
# this is for the index
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Попробуйте это в вашем файле .htaccess и проверьте, включен ли механизм перезаписи на сервере и есть ли модуль mod_rewrite.c в основном файле конфигурации apache, который называется httpd.conf.
1. RewriteRule ^ о $ about.php [L] ИЛИ 2. RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -D RewriteCond% {REQUEST_FILENAME} .php -f RewriteRule ^ (. *) $ 1.php
Надеюсь, они работают нормально.
ИЛИ иначе это еще один вариант со всем описанием:
Параметры правил перезаписи Apache + FollowSymLinks RewriteEngine On RewriteBase /
RewriteCond% {REQUEST_FILENAME}! -F RewriteCond% {REQUEST_URI}! (. [A-zA-Z0-9] {1,5} | / | # (.)) $ RewriteRule ^ (.) $ 1 / [R = 301, L]
RewriteCond% {REQUEST_FILENAME}! -D RewriteCond% {REQUEST_FILENAME} .php -f RewriteRule ^ ([^.] +) / $ $ 1.php
Думаю, вы хотите знать:
Это для сайтов, которые не используют интерфейсный контроллер, где все запросы принудительно проходят через index.php. Если вам это нужно, вы должны заменить третий блок своим.
Пример показан только с .php. Если вы хотите использовать его, например, с .html, вы должны скопировать / вставить третий блок и заменить «.php» в строках (1,) 3 и 4 на «.html» (если у кого-то нет аккуратного способа сделать это ?)
Контент «example.com/something/» может быть получен с «example.com/something.php» или «example.com/something/index.php».
Чтобы ссылаться на другие страницы, просто href = ”/ some / thing /” или href = ”// example.com/some/thing/”.
С .css и .js вы хотите, чтобы href = "/ style.css" или href = "/ folder1 / style.css". Иначе, если вы укажете href = "style.css" из "example.com/folder2/file.php", он будет смотреть на "example.com/folder2/style.css".
Примечание. Перед всем example.com стоит http: //.
Попробуйте код ниже и измените расширение, которое хотите скрыть:
1. для html файла
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
2.Для php файла
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
если нет другого "." в ваших файлах, кроме расширения, вы пробовали заменить ".php" какой-либо строкой?
# php extension to no extension url
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.\s+\sHTTP/.+
RewriteRule ^(.+)\.php $1 [R=301,L]