fim direito de reescrever as regras em um arquivo .htaccess
-
12-09-2019 - |
Pergunta
Eu preciso ter:
http://www.example.com/v1/my-project/ redirecionado para http://example.com/my-project/
forma:
(1) remover o www do HTTP_HOST
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
(2) remover o 'v1 /' parte da request_uri
RewriteCond %{REQUEST_URI} ^/v1/(.*)$ [NC]
RewriteRule . %1 [R=301,L]
(3) Eu também quero para redirecionar todo o 404 à página inicial.
ErrorDocument 404 /
(4) Finalmente, todos os meus documentos realmente residir em uma pasta "v2 /", que hospeda o site atual ativa, mas eu não quero "v2" no url, apenas "/"
RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule ^(.*)$ /v2/$1 [NC,L]
Então, aqui estão minhas regras. A minha pergunta é: eu não gerenciar (2): ele é redirecionado para / (por causa da regra (3) Eu acho que eu acho que o fim das minhas regras deve estar com defeito, mas eu não consigo fazê-lo direito Can.. você ajuda?
Solução
"Regra 3" não é uma regra em tudo, e sua ordem relativa aos seus RewriteRules não importa. Regra 2 está a falhar por algum outro motivo. Eu não tenho certeza se ele vai resolver o seu problema, mas eu gostaria de simplificar suas regras um pouco por escrevê-las assim:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L]
RewriteRule ^v1/(.*) /$1 [R=301,L,NC]
RewriteCond %{REQUEST_URI} !^/v2/ [NC]
RewriteRule (.*) /v2/$1 [NC,L]
Outras dicas
Você deve primeiro escrever qualquer regra que está causando um redirecionamento externo (bandeira R
) e, em seguida, as outras regras. Caso contrário, um URL já reescrito pode ser usado para um redirecionamento externo apesar de ter sido apenas destinado a um redirecionamento interno.
Então eu não vou mudar a ordem que você tem agora.