Назад | Перейти на главную страницу

.htaccess перенаправить все расширения на php

Я недавно обновил свой .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 /

Добавить косую черту в конце URL

RewriteCond% {REQUEST_FILENAME}! -F RewriteCond% {REQUEST_URI}! (. [A-zA-Z0-9] {1,5} | / | # (.)) $ RewriteRule ^ (.) $ 1 / [R = 301, L]

Удалить расширение .php из url

RewriteCond% {REQUEST_FILENAME}! -D RewriteCond% {REQUEST_FILENAME} .php -f RewriteRule ^ ([^.] +) / $ $ 1.php

Конец правил перезаписи Apache

Думаю, вы хотите знать:

  1. Это для сайтов, которые не используют интерфейсный контроллер, где все запросы принудительно проходят через index.php. Если вам это нужно, вы должны заменить третий блок своим.

  2. Пример показан только с .php. Если вы хотите использовать его, например, с .html, вы должны скопировать / вставить третий блок и заменить «.php» в строках (1,) 3 и 4 на «.html» (если у кого-то нет аккуратного способа сделать это ?)

  3. Контент «example.com/something/» может быть получен с «example.com/something.php» или «example.com/something/index.php».

  4. Чтобы ссылаться на другие страницы, просто href = ”/ some / thing /” или href = ”// example.com/some/thing/”.

  5. С .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]