wordpress - enable - mod_rewrite htaccess
Laravel y Wordpress en el mismo servidor/dominio (3)
Estoy tratando de alojar un sitio de WordPress dentro de un proyecto de Laravel (5.1). Tengo la siguiente estructura (desglosada)
├── app
├── config
├── public
│ ├── index.php
│ ├── wordpress -> ../wordpress
│ └── .htaccess
├── resources
├── storage
├── vendor
└── wordpress
├── index.php
├── wp-admin
├── wp-config.php
├── wp-includes
└── .htaccess
La raíz del documento vhost es pública.
Wordpress debe capturar todo lo que cae a través del .htaccess. Pero por ejemplo / login debería ir a laravel. Cuando mi proyecto crezca, pretendo agregar más reglas para atrapar las solicitudes de Laravel. Tengo el siguiente archivo .htaccess en / public:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/login" "index.php" [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^(.*)$" "wordpress/$1" [L]
</IfModule>
Pero cuando realizo la solicitud / inicio de sesión todavía termino con la página wordpress. Aquí hay una parte del registro:
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern ''^/login'' to uri ''login/''
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern ''^(.*)$'' to uri ''login/''
RewriteCond: input=''/var/www/public/login'' pattern=''!-d'' => matched
RewriteCond: input=''/var/www/public/login'' pattern=''!-f'' => matched
rewrite ''login/'' -> ''wordpress/login/''
add per-dir prefix: wordpress/login/ -> /var/www/public/wordpress/login/
strip document_root prefix: /var/www/public/wordpress/login/ -> /wordpress/login/
internal redirect with /wordpress/login/ [INTERNAL REDIRECT]
Parece que la reescritura no se detiene en la bandera [L].
Como se preguntó en el comentario, aquí está la respuesta:
Como puede ver en sus registros, la primera condición no coincide:
applying pattern ''^/login'' to uri ''login/''
login/
no comienza con /
Entonces necesitas cambiar tu regla a
RewriteRule "^login/" "index.php" [L]
Es posible agregar una condición de reescritura al archivo Laravel .htaccess
predeterminado que permitirá que Laravel .htaccess
todas las solicitudes a un subdirectorio (/ wordpress).
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Ignore Wordpress directory
RewriteCond $1 !^(wordpress)
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Terminó haciendo la misma pregunta en ServerFault. Ahí tengo la respuesta. Vincularlo aquí para la referencia:
https://serverfault.com/questions/739728/laravel-and-wordpress-on-same-server-domain