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

Правила Htaccess для изменения пути URL

У моего клиента есть веб-сайт, служащий example.com. Он хочет служить ему как example.com/pl, сохраняя корневой путь для будущей версии сайта на английском языке.

Мне интересно, можно ли это сделать с помощью правил .htaccess. Текущий .htaccess выглядит следующим образом:

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Можно ли изменить правила, чтобы достичь того, чего ожидает клиент? Если да, то как?

Изменять структуру URL-адресов, как это, не следует в .htaccess в одиночестве. Прежде всего, вам все еще нужно изменить структуру URL-адресов в вашем приложении. Все ваши внутренние ссылки (href атрибуты) необходимо изменить на новую структуру URL. т.е. Где вы раньше "/path/to/page"в HTML это теперь нужно изменить на"/pl/path/to/page".

Так,

  1. Измените структуру URL-адреса в своем приложении.

Поскольку у вас уже есть фронт-контроллер (т.е. все проходит через index.php который направляет запрос), то вам действительно не нужно ничего менять в .htaccess. Однако ваш фронт-контроллер (index.phpи т. д.) необходимо изменить для работы с новым форматом URL.

  1. Обновите свой фронт-контроллер.

Как только ваше приложение будет нормально работать с новой структурой URL, вы можете реализовать внешнее перенаправление в .htaccess перенаправить /path/to/page к /pl/path/to/page. Это полезно для поисковых систем и любых входящих ссылок / закладок, которые ведут на старые URL-адреса.

  1. Перенаправляйте все запросы в новый формат URL.

Например, до существующей внутренней перезаписи (фронт-контроллер) и после вашего канонического перенаправления с www на не-www вы можете сделать что-то вроде:

RewriteCond %{REQUEST_URI} /(.*)
RewriteRule !^pl/ /pl/%1 [R=301,L]

Если запрошенный URL не начинается с /pl/ затем добавьте префикс к URL-адресу и выполните перенаправление.

сохранение корневого пути для будущей версии сайта на английском языке.

Это было бы потенциальной проблемой, поскольку вам нужно перенаправить все корневые запросы на /pl/... тем временем некоторые / многие существующие входящие ссылки могут не обновляться. Вам нужно будет отключить перенаправление, когда вы реализуете английскую версию в корне, или разумно перенаправите только необходимые URL-адреса. Или реализуйте английскую версию с /en/ префикс?