Tenho a seguinte estrutura de pastas em meu servidor web:
Eu preciso de algumas regras de reescrita:
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.
Quando a URL solicitada tem la
var - 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?
... 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/foo
deve 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 ( RewriteCond
diretiva) exclui URLs que contêm o la
parâ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 %1
na string de substituição contém o domínio que está sendo solicitado - menos um www
subdomí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 aRewriteCond %{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.com
domí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 DirectoryIndex
diretiva). 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 la
valor do parâmetro para os personagens 0-9
, a-z
, A-Z
, _
e -
. O la
parâ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.
deixe-me dizer algumas palavras