Saltar al contenido

wordpress: la URL solicitada / about no se encontró en este servidor

octubre 29, 2021
apple touch icon@2

Aquí hay otra versión para WordPress, la original no funcionó como se esperaba.

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index.php$ - [END]
    RewriteCond $1 ^(index.php)?$ [OR]
    RewriteCond $1 .(gif|jpg|png|ico|css|js)$ [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*)$ - [END]
    RewriteRule ^ /index.php [L]
</IfModule>
# END WordPress

Referencia de este Github repositorio, modificado un poco. Después de pruebas excesivas, esta regla no resuelve todos los problemas. Tenemos una tienda web de WordPress, que tiene 40 complementos y en algún lugar hay un conflicto de reescritura. Espero sinceramente que la próxima versión de WordPress no tenga reescrituras de URL.


RewriteRule ^index.php$ - [L]

Regla de reescritura de sintaxis

los ^ significa el comienzo de la cadena, escapa . o significaría cualquier carácter, y $ significa el final de la cadena.

^index.php$ si http (s): // nombre de host /index.php - hacer nada [END] La bandera se puede utilizar para finalizar no solo la ronda actual de procesamiento de reescritura, sino también para evitar cualquier procesamiento de reescritura posterior.


RewriteCond $1 ^(index.php)?$ [OR]

Condición de reescritura de sintaxis

En RewriteCond utilizando $1 como una cadena de prueba hace referencia a los contenidos capturados de todo, desde el principio hasta el final de la URL http (s): // nombre de host /bla / bla.php. Si se usa en sustitución o condición, hace referencia a una referencia inversa capturada. RewriteRule (bla)/(ble.php)$ - para http (s): // nombre de host /bla / ble.php captura bla dentro $1 y ble.php dentro $2. Se puede acceder a varios grupos de captura a través de $3..N.

( ) agrupa varios personajes en una sola unidad, ? fuerza el partido opcional.
[OR] flag le permite combinar condiciones de reescritura con una relación lógica OR en lugar de la Y predeterminada.

En resumen, si bla / bla.php contiene index.php O la siguiente condición


RewriteCond $1 .(gif|jpg|png|ico|css|js)$ [NC,OR]

( ) agrupa varios personajes en una sola unidad, | separa los caracteres en subgrupos y los condiciona si alguno de ellos.
[NC] El indicador hace que RewriteRule coincida sin distinción entre mayúsculas y minúsculas.

En resumen, si bla / bla.php termina con cualquiera de los tipos de archivo O la siguiente condición


RewriteCond %{REQUEST_FILENAME} -f [OR]

Las variables de servidor son variables de la forma% {NAME_OF_VARIABLE} donde NAME_OF_VARIABLE puede ser una cadena tomada de la siguiente lista:

ingrese la descripción de la imagen aquí

%{REQUEST_FILENAME} es la ruta completa del sistema de archivos local al archivo o script que coincide con la solicitud, si esto ya ha sido determinado por el servidor en el momento en que se hace referencia a REQUEST_FILENAME. De lo contrario, como cuando se usa en el contexto de host virtual, el mismo valor que REQUEST_URI. Dependiendo del valor de AcceptPathInfo, es posible que el servidor solo haya usado algunos componentes principales de REQUEST_URI para asignar la solicitud a un archivo.

-f compruebe el archivo regular. Trata la cadena de prueba como un nombre de ruta y comprueba si existe o no.

En resumen, si bla / bla.php es un archivo O la siguiente condición


RewriteCond %{REQUEST_FILENAME} -d

-d comprobar el directorio. Trata la cadena de prueba como un nombre de ruta y prueba si existe o no.

En resumen, si bla / bla.php es un directorio


RewriteRule ^(.*)$ - [END] not as in Github [S=1]

Esta declaración solo se ejecuta cuando una de las condiciones devuelve verdadera.

. coincidir con cualquier personaje * cero o más veces.

los [S] La bandera se usa para omitir reglas que no desea ejecutar. La sintaxis de la bandera de salto es [S=N], dónde N significa la cantidad de reglas que se deben omitir (siempre que RewriteRule coincida). Esto se puede considerar como una declaración goto en su conjunto de reglas de reescritura. En el siguiente ejemplo, solo queremos ejecutar RewriteRule si el URI solicitado no se corresponde con un archivo real.

En resumen, no hagas nada


RewriteRule ^ /index.php [L]

los [L] flag hace que mod_rewrite deje de procesar el conjunto de reglas. En la mayoría de los contextos, esto significa que si la regla coincide, no se procesarán más reglas. Esto corresponde al último comando en Perl, o al comando break en C. Utilice este indicador para indicar que la regla actual debe aplicarse inmediatamente sin considerar más reglas.

En resumen, reescriba cada ruta como http (s): // nombre de host /index.php


Cogí este pequeño documento de la documentación de apaches.org. Enlaces a continuación.

close