integrar instalar entre diferencia dentro corcel con composer php wordpress .htaccess laravel http

php - instalar - Proyecto de Laravel junto al proyecto de Wordpress(en la carpeta public_html)



integrar laravel con wordpress (3)

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 la mejor manera de procesar la solicitud. Por lo tanto, dejará los archivos .htaccess que vienen con Laravel y WordPress en sus directorios. Simplemente cree otro para el directorio padre que los contiene a ambos.

La siguiente información asume que la ruta completa de public_html es /var/www/public_html .

Estructura de la carpeta

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

/var/www/public_html/.htaccess

# Limit Access To Laravel Public Folder <Directory "/var/www/public_html/laravel"> Order Deny,allow Deny from all </Directory> <Directory "/var/www/public_html/laravel/public"> Allow from all </Directory> # Rewrite Requests <IfModule mod_rewrite.c> 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] </IfModule>

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 asume que está instalado en el directorio superior. El ayudante asset() se utiliza para generar rutas a archivos de activos. Por lo tanto, tendrá que anular la función predeterminada por una propia. Aquí es cómo:

Crea la 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 carga automática editando composer.json

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

Si tiene acceso a la línea de comandos, actualice PHP composer

composer dump-autoload

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

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>

Existen las siguientes rutas:

  • api / licenseplate
  • api / calendario
  • autenticación / inicio de sesión
  • Configuración de administrador
  • admin / citas
  • cita
  • ...

Así que un ejemplo de una URL es http://domain.com/appointment .

Ahora me gustaría tener un sitio web de wordpress en domain.com. Así que cuando vas a domain.com ves el sitio web de wordpress. Pero también quiero tener las URL como / cita de mi proyecto de laravel.

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


Aquí hay un enfoque que tomé cuando me encontré con una situación similar. Instale su wordpress en el directorio public_html y preferiblemente coloque su laravel application en el directorio WP:

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

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

El mejor enfoque es seguir la arquitectura del proveedor de servicios de 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 la aplicación de la aplicación, 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 aprendizaje a algo como:

{!! get_header() !!} <div class="container"> <div class="content"> <div class="title">Laravel 5</div> <div class="quote">{{ Inspiring::quote() }}</div> </div> </div> {!! get_footer() !!}

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


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 describir las rutas de Laravel en .htaccess. Ejemplo de código de /var/www/laravel/public/.htaccess :

<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> 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] </IfModule>

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

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