Htaccess regras para modificar o caminho da URL

1

Um cliente meu tem um website, servido como example.com . Ele deseja veiculá-lo como example.com/pl , salvando o caminho da raiz de uma versão futura do site em inglês.

Eu estou querendo saber se isso é factível usando regras de .htaccess. O atual .htaccess é o seguinte:

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]

As regras podem ser alteradas para alcançar o que o cliente espera? Se sim, como?

    
por mingos 06.02.2017 / 23:49

1 resposta

1

Alterar a estrutura da URL como esta não é algo que você deve fazer em .htaccess sozinho. Em primeiro lugar, você ainda precisa alterar a estrutura da URL em seu aplicativo. Todos os seus links internos ( href attributes) precisam ser alterados para a nova estrutura de URL. ie. Onde você tinha " /path/to/page " no HTML, isso agora precisa ser alterado para " /pl/path/to/page ".

Então,

  1. Altere a estrutura do URL em seu aplicativo.

Como você já tem um front-controller (ou seja, tudo passa por index.php , que encaminha a solicitação), não há nada que você realmente precise alterar em .htaccess . No entanto, o seu front-controller ( index.php , etc.) precisa ser modificado para lidar com o novo formato de URL.

  1. Atualize seu front-controller.

Quando o aplicativo estiver funcionando bem com a nova estrutura de URL, você poderá implementar um redirecionamento externo em .htaccess para redirecionar /path/to/page para /pl/path/to/page . Isso é para o benefício dos mecanismos de pesquisa e de quaisquer links / marcadores de entrada que estejam vinculados aos URLs antigos.

  1. Redirecionar todas as solicitações para o novo formato de URL.

Por exemplo, antes de suas reescritas internas existentes (front controller) e depois de seu redirecionamento canônico www para não-www, você poderia fazer algo como:

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

Se o URL solicitado não começar com /pl/ , prefixue o URL e redirecione-o.

saving the root path for a future site version in English.

Isso seria um possível problema, já que você precisa redirecionar todas as solicitações de raiz para /pl/... nesse ínterim e alguns / muitos links de entrada existentes podem não ser atualizados. Você precisará desativar o redirecionamento quando implementar a versão em inglês na raiz ou redirecionar de maneira inteligente apenas as URLs necessárias. Ou implemente a versão em inglês com um prefixo /en/ ?

    
por 07.02.2017 / 01:43