У моего клиента есть веб-сайт, обслуживаемый как 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. т.е. Если раньше в HTML было « / path / to / page
», то теперь его необходимо изменить на « / pl / path / to / page
».
Итак ,
Поскольку у вас уже есть фронт-контроллер (то есть все проходит через index.php
, который направляет запрос)тогда вам не нужно ничего менять в .htaccess
. Однако ваш фронт-контроллер ( index.php
и т. Д.) Необходимо изменить, чтобы он мог работать с новым форматом URL.
Как только ваше приложение будет нормально работать с изменив структуру URL, вы можете реализовать внешнее перенаправление в .htaccess
для перенаправления / path / to / page
на / pl / path / to / page
. Это полезно для поисковых систем и любых входящих ссылок / закладок, которые ссылаются на старые URL-адреса.
Например, перед существующей внутренней перезаписью (фронт-контроллер) и после вашего канонического перенаправления с www на не-www вы можете сделать что-то вроде:
RewriteCond %{REQUEST_URI} /(.*)
RewriteRule !^pl/ /pl/%1 [R=301,L]
Если запрашиваемый URL не начинается с / pl /
, тогда добавьте его к URL-адресу и выполните перенаправление.
сохраните корневой путь для будущей версии сайта на английском языке.
Это может стать потенциальной проблемой, поскольку вам придется перенаправлять все корневые запросы на / pl / ...
тем временем некоторые / многие существующие входящие ссылки могут не обновляться. Вам нужно будет отключить перенаправление, когда вы реализуете английскую версию в корне, или разумно перенаправите только необходимые URL-адреса. Или реализовать английскую версию с префиксом / en /
?