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

时间:2017-05-15 16:29:18

标签: wordpress apache laravel .htaccess

我需要在现有的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
    
  • .htaccess文件夹

  • laravelapp

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /laravelapp/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>
    ```
    
  • .htaccess文件夹中的
  • laravelapp/public包含分布式软件包中的标准laravel .htaccess文件。

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

1 个答案:

答案 0 :(得分:1)

Laravel网站阅读

RewriteBase /

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

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

  1. 创建一个类以指向新位置
  2. 创建新文件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
    
    1. 编辑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__.'/../')
      );
      
    2. 编辑public \ index.php

    3. 更改

      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';
      
      1. 将public复制到public_html
      2. 现在,复制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,否则它将失败。

        1. 配置.htaccess
        2. 更改.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]
          

          希望这有帮助!