Правила 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]

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

1
задан 7 February 2017 в 00:49
1 ответ

Подобное изменение структуры URL-адресов не следует делать только в .htaccess . Прежде всего, вам все еще нужно изменить структуру URL-адресов в вашем приложении. Все ваши внутренние ссылки (атрибуты href ) должны быть изменены на новую структуру URL. т.е. Если раньше в HTML было « / path / to / page », то теперь его необходимо изменить на « / 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 / ?

1
ответ дан 3 December 2019 в 23:34

Теги

Похожие вопросы