сегодня у меня проблема с файлом.htaccess. На моем сервере у меня есть несколько папок, каждая из которых представляет собой отдельный пример сайта ниже:
Структура сервера (глобальная папка)
- my_portfolio
- website_two
- my_website
- example
В папке "example" у меня есть файл.htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [L]
#To remove www header
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
RewriteRule работает хорошо, когда я открываю адрес своего сайта без расширений "www" и.php, но невидимым, но когда я нажимаю ссылку на другой сайт в меню, я получаю что-то вроде этого: www.example.com/example/contact.
Адрес на мой сайт www.example.com и все для этого веб-сайта находится в папке примера на сервере. Я не знаю, где и что я написал неправильно. Всегда, когда я пытаюсь перейти к другому механизму перезаписи webside, дайте мне ссылку без расширения.php, но добавьте имя папки перед ссылкой.
Это хороший пример:
www.example.com/contact.php - normal link without htaccess
example.com/example(folder name where is a website)/contact - now
example.com/contact - should be
Измените порядок своих правил и сохраните правила перенаправления перед правилами внутренней маршрутизации:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
#To remove www header
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NE]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
Также проверьте это из нового браузера, чтобы избежать старого кеша 301.
/example/
не установлен какDocumentRoot
в вашей настройкеVirtualHost
?