
Então eu tenho isso
RewriteCond %{REQUEST_URI} (da-dk)/(.*)(/|\.php)$
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
Mas, por alguns motivos, example.com/da-dk/ fornece "404 - não encontrado"
Eu gostaria de tentar entender por que o Apache chega a essa conclusão - ou seja, quais regras ele encontrou e seguiu
Responder1
Supondo que isso esteja no .htaccess
arquivo raiz ...
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
Uma solicitação para /da-dk/
(que corresponde ao URL-path da-dk/
) não corresponde ao regex, ^(da-dk)/(.*)(/|\.php)$
portanto esta regra não é processada/seguida.
Então, a menos que você tenha outras regras que correspondam a esta solicitação,nãoregras são seguidas, daí o 404. (Quanto a quais regras são "encontradas", bem, todas as outras regras que você tem sãoencontrado.)
Aliás, o precedentedoença( RewriteCond
diretiva) é totalmente supérflua aqui e deve ser removida. Não é fazer mais nada do que o queRewriteRule
padrãojá estabeleceu.
Especificamente, esta regra (regex) corresponderia a URLs no formato:
/da-dk/.php
/da-dk/<foo>/
/da-dk/<foo>.php
/da-dk/<foo>/<bar>/<baz>/
/da-dk/<foo>/<bar>/<baz>.php
Não corresponde:
/da-dk/<foo>
/da-dk/
Esta regra simplesmente remove o /da-dk
prefixo do URL solicitado (presumivelmente noter esperançaque o URL reescrito corresponda a um diretório ou arquivo do sistema de arquivos).
Se /da-dk/
for reescrita de volta à raiz, a regra acima pode ser modificada para permitir isso (no processo, ela também pode ser ligeiramente simplificada). Por exemplo, tente o seguinte:
RewriteRule ^da-dk/(.+(/|\.php))?$ /$1 [L]
Aqui, a parte do caminho da URL depois da-dk/
é feitaopcional. (Neste caso, a $1
referência anterior é efetivamentevazio.)
Ao alterar o quantificador de *
para +
isso também evita a correspondência com o (absurdo) URL /da-dk/.php
.
Não precisa decapturarparte da-dk
(primeiro segmento do caminho), já que este não está sendo utilizado nosubstituiçãostring (2º argumento).
A $1
referência anterior agora contém todo o caminho da URL após o da-dk/
prefixo. (Não há necessidade de $2
e $3
como você tinha originalmente.)