我需要在现有的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文件。
有没有办法让这成为可能?
答案 0 :(得分: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';
现在,复制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]
希望这有帮助!