首页 文章

与运行在子文件夹上的Laravel的Wordpress

提问于
浏览
0

我需要在现有的Wordpress网站上添加一个新的Laravel应用程序 . 两者都将通过Apache webserver运行 . 这个想法是:

  • https://website.com/ - > Wordpress网站

  • https://website.com/laravelapp - > Laravel Web应用程序

在文件系统中,根文件夹包含Wordpress文件,子文件夹 laravelapp 包含Laravel文件(因此,laravel public 文件夹是 laravelapp 的子文件夹) .

当我浏览这些时,这是当前返回的结果:

  • https://website.com/ - >返回Wordpress网站,工作永久链接

  • https://website.com/laravelapp - >返回403错误

  • https://website.com/laravelapp/public - >返回Laravel App

这告诉我mod_rewrite可用并正常工作 . 但我希望用户能够使用 https://website.com/laravelapp 访问该laravel应用程序(而不是公用文件夹) .

我一直试图设置 .htaccess 以使这种安排成为可能,但我被卡住了 . 我目前有:

  • .htaccess 在网站的根目录
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/laravelapp [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  • .htaccesslaravelapp 文件夹中
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /laravelapp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>


-  `.htaccess`  on  `laravelapp/public` 文件夹包含分布式软件包中的标准laravel .htaccess文件 . 

有没有办法让这成为可能?

1 回答

  • 1

    Laravel网站阅读有

    RewriteBase /

    因此,我认为您需要的最佳方式是为Laravel网站创建一个子域 .

    但您仍然可以尝试配置.htaccess,请按照以下步骤操作:

    • 创建一个指向新位置的类

    创建一个新文件shared_hosting_root \ applications \ your_app_root \ app \ GoPublic.php

    class GoPublic extends \Illuminate\Foundation\Application
    {
        /**
        * Get the path to the public / web directory.
        *
        * @return string
        */
        public function publicPath()
        {
        return $this->basePath.DIRECTORY_SEPARATOR.'../../public_html/your_app_name';
        }
    }
    

    我们在这里使用相对路径,因此您不必知道绝对路径 . 但是遵循我前面提到的相同的推荐文件夹结构是非常关键的 .

    您可能需要在根文件夹中运行以下命令以自动加载新类 . 否则,您将收到一条错误消息,指出无法找到该课程 .

    composer dump-autoload
    
    • 编辑bootstrap \ app.php
    /* -- remove/comment this original code
    $app = new Illuminate\Foundation\Application(
     realpath(__DIR__.'/../')
    );
    -- until here */
    
    /* -- add this new code -- */
    $app = new App\GoPublic(
     realpath(__DIR__.'/../')
    );
    
    • 编辑public \ index.php

    更改

    require __DIR__.'/../bootstrap/autoload.php';
    

    require __DIR__.'/../../applications/your_app_name/bootstrap/autoload.php';
    

    更改

    $app = require_once __DIR__.'/../bootstrap/app.php';
    

    $app = require_once __DIR__.'/../../applications/your_app_name/bootstrap/app.php';
    
    • 将public复制到public_html

    现在,复制 applications\your_app_name\public into public_html\your_app_name 中的内容 .

    为了简化过程,我将创建一个bash文件来自动将文件复制到新位置 .

    创建一个新文件 shared_hosting_root\applications\your_app_name\deploy.sh

    #!/bin/bash
    echo "Copy public folder to public_html/your_app_name"
    rsync -rv ./public/ ../../public_html/your_app_name
    

    使用rsync可确保如果您多次运行此deploy.sh,则只有较新的那些将被复制到新位置 .

    当您准备好运行它时,在终端运行中:

    ?> cd applications\your_app_name
    ?> sh deploy.sh
    

    警告:您必须在applications \ your_app_name中运行deploy.sh,否则它将失败 .

    • 配置你的 .htaccess

    改变你的 .htaccess 按照这个

    # Do not change this line. 
    RewriteEngine on 
    
    # Change example.com to your domain name
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
    
    # Change your_app_name to the subfolder name
    RewriteCond %{REQUEST_URI} !^/your_app_name/ 
    
    # Don't change the following two lines. 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    
    # Change your_app_name to the subfolder name
    # Change example.com to your domain name
    RewriteRule ^(.*)$ /your_app_name/$1 
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
    RewriteRule ^(/)?$ your_app_name/index.php [L]
    

    希望这有帮助!

相关问题