将Laravel 5应用程序移动到服务器子文件夹中

iba*_*njo 5 php apache .htaccess laravel

因此,我开发了一个功能齐全的Laravel 5应用程序,并将其部署到我的客户服务器上,运行Apache2,PHP5和MySQL.该应用程序按预期工作,并正确地重写URL.我现在需要简单地将我的应用程序克隆到另一台运行完全相同堆栈的服务器.问题是我需要将我的应用程序放在子文件夹中,以便可以通过匹配模式的URL访问它domain2.com/movedApp.

换句话说:第一台服务器响应:

domain1.com/my/routes
Run Code Online (Sandbox Code Playgroud)

第二台服务器需要响应:

domain2/movedApp/my/routes
Run Code Online (Sandbox Code Playgroud)

我试图完全重现VirtualHost指令,该指令适用于第一台服务器,/movedApp在需要的地方添加并添加RewriteBase.htaccesspublic文件夹中的文件,但无济于事.

我注意到从以下网址正确遵循路由:

domain2.com/movedApp/public/index.php/my/routes
Run Code Online (Sandbox Code Playgroud)

我仍然在Apache2日志中获得404错误资产.

我特此报告我的.htaccess文件位于public我工作的Laravel应用程序的文件夹中.

的.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine on

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ /index.php [L]

</IfModule>
Run Code Online (Sandbox Code Playgroud)

我还报告了Web服务器用来为我的应用程序提供服务的配置文件

default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/galmaster/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/galmaster/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

iba*_*njo 1

因此,我一直在摆弄虚拟主机,但我发现的最佳解决方案根本不涉及它们,这就是。

首先要做的是.htaccess应用程序的根文件夹及其公共文件夹配置文件。我在这个答案.htaccess中找到了一个简单的工作文件,我在这里报告:

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

.htaccess相反,默认值对于public文件夹来说效果很好。

最后一步是在 中正确配置您的路由routes.php。对我有用的解决方法非常粗糙,也许人们可以找到一些更精致的解决方案,但它仍然存在。

// Get base (root) route
$base_route = basename(base_path());

Route::get($base_route, function () {
    return view('welcome');
});

Route::get($base_route.'/myRoute', function() {
    return view('myRoute');
});
Run Code Online (Sandbox Code Playgroud)

所以基本上你需要$base_route在应用程序中添加每条路线。希望这可以帮助。