Proyecto Laravel junto al proyecto WordPress (en la carpeta public_html)

Tengo un proyecto Laravel en mi carpeta public_html . El dominio es, por ejemplo, dominio.com. Mi archivo .htaccess (en la carpeta public_html) es así:

 RewriteEngine On RewriteRule ^(.*)$ public/$1 [L]  

Hay las siguientes rutas:

  • api / licenseplate
  • api / calendario
  • auth / login
  • Configuración de administrador
  • administrador / citas
  • cita

Entonces, un ejemplo de una URL es http://domain.com/appointment .

Ahora me gustaría tener un sitio web de wordpress en domain.com. Entonces, cuando vayas a domain.com, verás el sitio web de wordpress. Pero también quiero tener las URL como / cita de mi proyecto laravel.

¿Cuál es la forma más fácil y limpia de hacer esto?

Puede crear un enlace simbólico al directorio público de WordPress en la carpeta Laravel. Por ejemplo, wp :

 /var /www /laravel /public /wp #(symlink to -> /var/www/wordpress/public_html) index.php .htaccess /wordpress /public_html index.php .htaccess 

Y describe las rutas de Laravel en .htaccess. Ejemplo de código de /var/www/laravel/public/.htaccess :

   Options -MultiViews  RewriteEngine On RewriteCond %{ENV:REDIRECT_FINISH} . RewriteRule ^ - [L] # Laravel RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} !.*\.php$ RewriteRule ^(.*)$ $1 [E=FINISH:1,L] RewriteCond %{REQUEST_URI} ^/(api/licenseplate)(\?.*|$) [OR] RewriteCond %{REQUEST_URI} ^/(api/calendar)(\?.*|$) [OR] RewriteCond %{REQUEST_URI} ^/(admin/settings)(\?.*|$) [OR] RewriteCond %{REQUEST_URI} ^/(admin/appointments)(\?.*|$) [OR] RewriteCond %{REQUEST_URI} ^/(appointment)(\?.*|$) [OR] RewriteCond %{REQUEST_URI} ^/(auth/login)(\?.*|$) RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [E=FINISH:1,L] # WordPress RewriteCond %{REQUEST_URI} !^/wp RewriteRule ^(.*)$ /wp/$1 [E=FINISH:1,L]  

Código de /var/www/wordpress/public_html/.htaccess (solo copia de tu wordpress .htaccess):

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Estructura del servidor

.htaccess archivos .htaccess proporcionan una forma de realizar cambios de configuración por directorio. Esto significa que solo necesita dirigir la solicitud al directorio que tendrá reglas sobre cómo procesar mejor la solicitud. Por lo tanto, dejará los archivos .htaccess que vienen con Laravel y WordPress en sus directorios. Simplemente crea otro para el directorio principal que los mantiene a ambos.

A continuación se supone que la ruta completa de public_html es /var/www/public_html .

Estructura de carpetas

 /var/www/public_html/laravel /var/www/public_html/wp 

/var/www/public_html/.htaccess

 # Limit Access To Laravel Public Folder  Order Deny,allow Deny from all   Allow from all  # Rewrite Requests  RewriteEngine On # Do Not Rewrite Directory And File Requests RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ $1 [L] # Rewrite Laravel Routes RewriteCond %{REQUEST_URI} api/licenseplate [OR] RewriteCond %{REQUEST_URI} api/calendar [OR] RewriteCond %{REQUEST_URI} admin/settings [OR] RewriteCond %{REQUEST_URI} admin/appointments [OR] RewriteCond %{REQUEST_URI} appointment [OR] RewriteCond %{REQUEST_URI} auth/login RewriteRule ^(.*)$ laravel/public/$1 [L] # Rewrite To WordPress For Everything Else RewriteRule ^(.*)$ wp/$1 [L]  

Configuraciones de la aplicación

Tanto Laravel como WordPress tienen formas de generar enlaces a sus activos (imágenes, CSS, JavaScript).

WordPress está diseñado para permitir fácilmente la instalación en un subdirectorio, por lo que solo necesita cambiar la dirección de WordPress y la dirección del sitio en la pantalla de configuración general .

Laravel supone que está instalado en el directorio superior. El helper asset() se usa para generar rutas a archivos de activos. Por lo tanto, deberá anular la función predeterminada con una propia. Aquí es cómo:

Crea app/helpers.php con estos contenidos

 /** * Generate an asset path for the application * with the installation sub-directory * prepended to the path. * * @param string $path * @param bool $secure * @return string */ function asset($path, $secure = null) { $path = ltrim($path, '/'); $dir = basename(dirname(__DIR__)) . '/public'; $url = app('url')->asset($path, $secure); return str_replace($path, $dir . '/' . $path, $url); } 

Agregue app/helpers.php al proceso de autocarga editando composer.json

 "autoload": { //... "files": [ "app/helpers.php" ] }, 

Si tiene acceso a la línea de comando, actualice el compositor PHP

 composer dump-autoload 

Este es un enfoque que tomé cuando encontré una situación similar. Instale su wordpress en el directorio public_html y preferiblemente coloque su laravel application en el directorio de WP:

 wp-admin/ wp-content/ wp-includes/ ... other wordpress files ... app/ <-- laravel application |-> app/ |-> bootstrap/ |-> config/ |-> public/ |-> ... other laravel files and directories ... 

Ahora, para tener las WordPress functions disponibles en su Laravel application , incluya wp-load.php en su instalación de Laravel y luego puede usar las enqueueing functions de WordPress para cargar los recursos que necesita.

El mejor enfoque es seguir la architecture del proveedor de servicios Laravel. Escriba un proveedor de servicios para incluir wp-load.php y use la boot function para cargar activos:

 // app/Providers/WordPressServiceProvider.php class WordPressServiceProvider extends ServiceProvider { protected $bootstrapFilePath = '../../wp-load.php'; // Adjust ur path public function boot() { // Load assets wp_enqueue_style('app', '/app/public/app.css'); // Adjust ur path } public function register() { // Load wordpress bootstrap file if(File::exists($this->bootstrapFilePath)) { require_once $this->bootstrapFilePath; } else throw new \RuntimeException('WordPress Bootstrap file not found!'); } } 

Y agregue el proveedor de servicios a su configuración de aplicación laravel, config/app.php:

  /* ... */ 'providers' => [ // ... /* * Application Service Providers... */ // ... App\Providers\WordPressServiceProvider::class, 

Ahora tenemos acceso a nuestras funciones de WordPress dentro de Laravel y podemos alterar las views laravel a algo como:

 {!! get_header() !!} 
Laravel 5
{{ Inspiring::quote() }}
{!! get_footer() !!}

Su sitio de wordpress debe estar accesible en www.urdomain.com y en la aplicación laravel en url www.urdomain.com/app/appointment o ajuste su .htaccess si desea un patrón de URL diferente. Espero que esto ayude.