Удалите расширение .php (явно написанное) для дружественного URL

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

Solutions Collecting From Web of "Удалите расширение .php (явно написанное) для дружественного URL"

вы можете удалить .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, если кто-то обращается к существующему файлу?