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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top