
entonces tengo esto
RewriteCond %{REQUEST_URI} (da-dk)/(.*)(/|\.php)$
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
Pero por algunas razones, example.com/da-dk/ muestra "404 - no encontrado"
Me gustaría intentar comprender por qué Apache llega a esa conclusión, es decir, qué reglas encontró y siguió.
Respuesta1
Suponiendo que esto esté en el .htaccess
archivo raíz...
RewriteRule ^(da-dk)/(.*)(/|\.php)$ /$2$3 [L]
Una solicitud de /da-dk/
(que coincide con la ruta URL da-dk/
) no coincide con la expresión regular, ^(da-dk)/(.*)(/|\.php)$
por lo que esta regla no se procesa ni se sigue.
Entonces, a menos que tenga otras reglas que coincidan con esta solicitud, entoncesNoSe siguen las reglas, de ahí el 404. (En cuanto a qué reglas se "encuentran", bueno, todas las demás reglas que tienes sonencontrado.)
Por cierto, lo anteriorcondición( RewriteCond
directiva) es aquí completamente superflua y debería eliminarse. No está haciendo nada más de lo queRewriteRule
patrónya ha establecido.
Específicamente, esta regla (regex) coincidiría con URL del formulario:
/da-dk/.php
/da-dk/<foo>/
/da-dk/<foo>.php
/da-dk/<foo>/<bar>/<baz>/
/da-dk/<foo>/<bar>/<baz>.php
No concuerda:
/da-dk/<foo>
/da-dk/
Esta regla simplemente elimina el /da-dk
prefijo en la URL solicitada (presumiblemente en elesperanzaque la URL reescrita coincida con un directorio o archivo del sistema de archivos).
Si /da-dk/
se debe reescribir desde la raíz, entonces la regla anterior se puede modificar para permitir esto (en el proceso, también se puede simplificar ligeramente). Por ejemplo, intente lo siguiente en su lugar:
RewriteRule ^da-dk/(.+(/|\.php))?$ /$1 [L]
da-dk/
Aquí, se hace la parte de la ruta URL posterior.opcional. (En este caso, la $1
referencia retrospectiva es efectivamentevacío.)
Al cambiar el cuantificador de *
a +
this también se evita hacer coincidir la URL (sin sentido) /da-dk/.php
.
No hay necesidad decapturala da-dk
parte (primer segmento de ruta), ya que esto no se está utilizando en elsustitucióncadena (segundo argumento).
La $1
referencia inversa ahora contiene la ruta URL completa después del da-dk/
prefijo. (No es necesario $2
y $3
como lo tenía originalmente).