htaccess для удаления расширения .php файлов моего сайта.
RewriteEngine on RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L,QSA]
Теперь, если я пойду на свой сайт
www.mysite.com/home
отлично работает, он перенаправляет на home.php, но URL-адрес по-прежнему дружественный.
Но если я напишу этот URL-адрес:
www.mysite.com/home.php
Домен home.php, и URL-адрес не является дружественным.
Как я могу избежать такого поведения? Я хочу, чтобы, если пользователь пишет www.mysite.com/home.php, URL-адрес, отображаемый в строке URL, будет www.mysite.com/home
вы можете удалить .php из таких запросов
RewriteCond %{REQUEST_URI} ^/(.*).php$ RewriteRule ^(.*)$ %1 [L,QSA]
Код
RewriteEngine On RewriteBase / # remove enter code here.php; use THE_REQUEST to prevent infinite loops RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] # remove index RewriteRule (.*)/index$ $1/ [R=301] # remove slash if not directory RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /$ RewriteRule (.*)/ $1 [R=301] # add .php to access file, but don't redirect RewriteCond %{REQUEST_FILENAME}.php -f RewriteCond %{REQUEST_URI} !/$ RewriteRule (.*) $1\.php [L]
Вы также можете поместить этот код в свой файл .htaccess
:
options +multiviews
Это делается для поиска доступных расширений (.html, .htm и .php, я думаю) внутри текущего каталога. Так что если вы, например, запрашиваете /user
он будет искать user.php
.
Ваш переписан игнорируется, поскольку он проверяет существующий файл на основе вашего правила:
RewriteCond %{SCRIPT_FILENAME} !-f
Я бы предложил добавить проверку URL-адреса в php для перенаправления на себя (без расширения). Или вы хотите отобразить ошибку 404, если кто-то обращается к существующему файлу?