У моего клиента есть веб-сайт, служащий 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
".
Так,
Поскольку у вас уже есть фронт-контроллер (т.е. все проходит через 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/
префикс?