.htaccess Reescribe el subdirectorio de Wordpress sin romper otros subdirectorios

Aug 20 2020

Así que tengo WordPress instalado, /wp/pero quiero que todas las URL de WordPress se reescriban para que aparezcan en el directorio raíz. Actualmente tengo esto funcionando (ver más abajo) pero quiero cambiar mi .htaccesspara que no rompa otros subdirectorios.

Por ejemplo, si quiero visitar www.example.com/images/image.png, actualmente me redirecciona a una página 404 en WordPress.

¿Es esto posible con .htaccess?

Código actual:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

Actualización : probé la sugerencia de MrWhite con el modo incógnito y un segundo navegador. Sin efecto. Nuevo .htaccessarchivo:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]
# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

Respuestas

MrWhite Aug 21 2020 at 01:54

Debe agregar una condición para excluir archivos existentes; de lo contrario, una solicitud /images/image.pngse reescribirá naturalmente /wp/images/image.pngy activará un 404 en WordPress (a menos /wp/images/image.pngque realmente exista).

Por ejemplo, agregue la siguiente condición a su regla existente:

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

ACTUALIZACIÓN: esto no pareció funcionar. Todavía va a la página 404 de WordPress

Ha puesto la RewriteConddirectiva en el lugar equivocado.

RewriteCondLas directivas no son declaraciones completamente separadas, son condiciones que se aplican a la RewriteRuledirectiva que sigue. Por sí solas, las RewriteConddirectivas no hacen nada.

La RewriteConddirectiva debe ir (a cualquier parte) antes que la RewriteRuledirectiva:

RewriteEngine on

#Wordpress
# Rewrites all URLS without wp in them
RewriteCond %{REQUEST_URI} !^/wp/

# Rewrites all URLS [Replace "example" with the actual domain, without the TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.

# Request does not map to an existing file
RewriteCond %{REQUEST_FILENAME} !-f

# Rewrite all those to insert /folder
RewriteRule ^(.*)$ /wp/$1 [L]

Además, eche un vistazo al .htaccessarchivo "WordPress" en el /wpsubdirectorio como referencia. Eso hace el mismo tipo de cosas.

Aparte: a menos que tenga varios dominios o subdominios que no desee reescribir, puede eliminar la verificación del nombre de host (es decir, la RewriteConddirectiva que verifica la HTTP_HOSTvariable del servidor).