.htaccess reescreve o conteúdo para a subpasta

usuário137

Tenho a seguinte estrutura de pastas em meu servidor web:

Estrutura da pasta

Eu preciso de algumas regras de reescrita:

  1. Quando eu visito http://testdomain1.com/, preciso definir /pages/testdomain1.com/como o diretório raiz para exibir o conteúdo deste diretório.

    Da mesma forma, http://testdomain2.com/a pasta raiz é /pages/testdomain2.com/etc.

  2. Quando a URL solicitada tem lavar - eu preciso reescrever no diretório de destino.

    Exemplo: http://testdomain1.com/?la=template1- definir /lands/template1/como diretório raiz

Tenho alguns problemas com meu atual .htaccess(para a primeira tarefa):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
RewriteRule ^(/)?$ pages/%{HTTP_HOST}/index.html [L]

A regra de reescrita funciona, mas todos os dados de ativos (js, css) não funcionam (404 não encontrado). Como posso definir as regras certas?

Sr. White

... mas todos os dados de ativos (js, css) não funcionam (404 não encontrado). Como posso definir regras corretas?

Provavelmente, isso é causado pelo uso de caminhos de URL relativos para seus ativos. Você precisa "consertar" seus caminhos de URL para serem relativos à raiz ou absolutos. Isso não é algo que deva ser consertado .htaccess, caso contrário, sua reescrita está OK.

Veja minha resposta à seguinte pergunta na pilha de webmasters, relacionada ao uso de caminhos de URL relativos para ativos estáticos ao usar a regravação de URL:

RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$
RewriteRule ^(/)?$ pages/%{HTTP_HOST}/index.html [L]

Isso apenas reescreve as solicitações para a raiz, ou seja, testdomain1.com/. E não testdomain1.com/foo- isso é intencional?

Preciso ter acesso a qualquer página ( example.com/page.html) não só index.html.

Se com isso você quer dizer que uma solicitação do formulário http://testdomain1.com/foodeve ser reescrita /pages/testdomain1.com/foo, então você precisa alterar o acima para algo como o seguinte:

RewriteCond %{QUERY_STRING} !^la=[\w-]+
RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com)$
RewriteRule !^pages/ pages/%1%{REQUEST_URI} [L]

Observe que isso reescreve tudo , incluindo CSS, JS e imagens.

A primeira condição ( RewriteConddiretiva) exclui URLs que contêm o laparâmetro de URL. (Esses URLs são tratados abaixo.)

Isso também corrige um bug em sua diretiva existente, em que uma solicitação para o subdomínio www (por exemplo. www.testdomain1.com) Teria resultado em uma reescrita incorreta. A referência anterior %1na string de substituição contém o domínio que está sendo solicitado - menos um wwwsubdomínio opcional . (Presumo que você não tenha um subdiretório www.testdomain1.com?) Embora, sem dúvida, você já deva estar canonizando o www / não-www anteriormente no arquivo de configuração.

(Lembre-se de escapar dos pontos literais.)

ATUALIZAR:

Tentei usar este caso para vários domínios, não apenas para testdomain1.com. Então eu preciso mudar a RewriteCond %{HTTP_HOST} ^(www.)?testdomain1.com$parte. Eu apenas tentei, RewriteCond %{REQUEST_URI}mas não funcionou.

Para vários domínios, você pode:

  • Duplique o bloco de código acima para cada domínio e altere o testdomain1.comdomínio na segunda condição.

  • Se isso se aplica a apenas 3 domínios, você pode usar a alternância na segunda condição, para corresponder a qualquer um dos 3 domínios. Por exemplo:

    RewriteCond %{HTTP_HOST} ^(?:www.)?(testdomain1\.com|testdomain2\.com|testdomain3\.com)$
    
  • Se isso se aplicar a qualquer domínio, torne a regex mais geral para corresponder a qualquer domínio. Por exemplo:

    RewriteCond %{HTTP_HOST} ^(?:www.)?([a-z0-9.-]+?)\.?$
    

2) Quando a URL de solicitação tem "la" var - eu preciso reescrever para o diretório de destino.
Exemplo: http://testdomain1.com/?la=template1- definir /lands/template1/como diretório raiz

Conforme mencionado em meu comentário, você provavelmente não deveria reescrever em um diretório. Não é o diretório que lida com a solicitação, mas basicamente um arquivo. Ao reescrever em um diretório, presumo que você esteja contando com o mod_dir emitindo uma sub-solicitação interna para o documento de índice de diretório (conforme especificado pela DirectoryIndexdiretiva). Por causa deste exemplo, assumirei que o índice do diretório é index.php.

Isso precisaria ser feito antes da reescrita acima, uma vez que é mais específico:

RewriteCond %{QUERY_STRING} ^la=([\w-]+)
RewriteRule ^$ /lands/%1/index.php [L]

%1(ao contrário de $1) é uma referência anterior ao padrão capturado no último CondPattern correspondente . A regex [\w-]+restringe o lavalor do parâmetro para os personagens 0-9, a-z, A-Z, _e -. O laparâmetro também deve ser o primeiro parâmetro de URL.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

.htaccess - silenciosamente reescreve / redireciona tudo para a subpasta interna

.htaccess redireciona todo o conteúdo da subpasta (com e sem barra final) para a mesma subpasta

.htaccess reescreve para o mesmo alias sem redirecionamentos infinitos

Mova todo o conteúdo para uma nova subpasta

.htaccess reescreve o URL para a versão não minimizada do arquivo (se existir) com base na string de consulta

O redirecionamento do Htaccess não funciona da sub-subpasta para o arquivo raiz

.htaccess para redirecionar para a subpasta

htaccess redireciona subpasta para subdomínio sem alterar o url

Htaccess: como redirecionar o caminho de uma subpasta para outra

htaccess não reescreve os urls corretamente

Redirecionar dinamicamente para a subpasta usando .htaccess, ocultar a subpasta no url sem usar o nome de domínio

regra de reescrita do htaccess para subpasta (url legal)

Capture a última subpasta do URL para redirecionar usando htaccess

htaccess redireciona a pasta para a subpasta

.htaccess redireciona para a mesma subpasta

.htaccess: veicula arquivos estáticos do diretório público sem público na URL, senão reescreve para index.php

GIT: mover todo o conteúdo de um pai / subpasta para pai /

como redirecionar para uma subpasta e, em seguida, reescrever o link da subpasta para fazer root no htaccess?

como redirecionar para uma subpasta e, em seguida, reescrever o link da subpasta para fazer root no htaccess?

Copiar o conteúdo da raiz do intervalo AWS S3 para o mesmo intervalo dentro da subpasta

.htaccess Reescreve completamente o URL para mostrar o arquivo em uma pasta, em vez da página na raiz

O Firebase reescreve no aplicativo VueJS de página única na subpasta

htaccess para redirecionar a raiz para a subpasta

.htaccess redireciona apenas a raiz de uma subpasta para outra subpasta?

.htaccess redireciona apenas a raiz de uma subpasta para outra subpasta?

Como obter / pasta / subpasta para exibir como / subpasta / usando htaccess

.htaccess redireciona apenas a raiz de uma subpasta para outra subpasta?

Como posso alterar o HTACCESS para apontar para a subpasta onde está o meu projeto

.htaccess redireciona ou reescreve de um pdf para outro