htaccess переписать (удалить расширение php)

0

сегодня у меня проблема с файлом.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
Теги:
.htaccess
mod-rewrite
url-rewriting

1 ответ

0

Измените порядок своих правил и сохраните правила перенаправления перед правилами внутренней маршрутизации:

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.

  • 0
    Здравствуйте, anubhava, спасибо за ваш ответ, но эффект тот же. Я проверяю это в новом браузере. Я загружаю Firefox для этого, но имя папки в ссылке не указывается. Не знаю, почему
  • 0
    /example/ не установлен как DocumentRoot в вашей настройке VirtualHost ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню