redirecionar para o subdiretório e fora do subdiretório
-
23-09-2019 - |
Pergunta
Eu tenho um problema de redirecionamento mod_rewrite que não consigo descobrir.
Todas as solicitações de um domínio específico são reescritas "silenciosamente" em um subdiretório designado. por exemplo www.mydomain.net/hello.html
Recupera o arquivo em /net/hello.html
. o seguinte .htaccess (colocado na minha raiz de hospedagem) alcança isso perfeitamente:
RewriteEngine on
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} 200 # <-- i will need this later. read to the end of the post.
RewriteRule .* - [L]
rewriteCond %{HTTP_HOST} ^www.mydomain.net$
rewriteCond %{REQUEST_URI} !^/net.*$
rewriteRule (.*) /net/$1 [L]
No entanto, os URLs diretos neste diretório, no entanto, devem redirecionar visivelmente com um 301 para o URL sem Esse subdiretório. por exemplo www.mydomain.net/net/hello.html
deve redirecionar www.mydomain.net/hello.html
(que ainda recupera o arquivo em /net/hello.html
). meu arquivo .htacces para isso (colocado em /net
) Infelizmente não funciona:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^(.*) /$1 [R=301,L]
eu recebo um loop de redirecionamento infinitivo, apesar do RewriteCond %{ENV:REDIRECT_STATUS} 200
Bloqueie o arquivo root .htaccess ... então o que há de errado?
BTW, eu tenho que usar o MOD_REWRITE, porque o site é hospedado external e não tenho acesso às configurações do Apache.
Muito obrigado por quaisquer indicadores.
Solução
Inspecione o Linha de solicitação HTTP dentro O PEDIDO em vez de:
RewriteCond %{THE_REQUEST} ^GET\ /net[/? ]
RewriteRule ^net($|/(.*)) /$2 [L,R=301]