因此,我开发了一个功能齐全的Laravel 5应用程序,并将其部署到我的客户服务器上,运行Apache2,PHP5和MySQL。该应用程序按预期工作,并正确地重写URL。
我现在需要简单地将我的应用程序克隆到另一台运行完全相同堆栈的服务器。问题是我需要将我的应用程序放在子文件夹中,以便可以通过匹配模式domain2.com/movedApp
的URL访问它。
换句话说: 第一台服务器响应:
domain1.com/my/routes
第二台服务器需要响应:
domain2/movedApp/my/routes
我尝试完全重现适用于第一台服务器的VirtualHost指令,在需要的位置添加/movedApp
并将RewriteBase
添加到新.htaccess
文件夹中的public
文件中,但无济于事。
我注意到从以下网址正确遵循路线:
domain2.com/movedApp/public/index.php/my/routes
我仍然在Apache2日志中获得404资产错误。
我特此报告位于我工作的Laravel应用程序的.htaccess
文件夹中的public
文件。
的.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>
我还报告了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>
答案 0 :(得分:1)
所以,我一直在努力摆弄VirtualHost,但我找到的最好的解决方案根本不涉及它们,而且就是这样。
首先要为应用的根文件夹及其公开文件夹配置.htaccess
个文件。
我在this answer中找到了一个简单的.htaccess
文件,我在此报告:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
默认.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');
});
所以基本上你需要在你的应用中的每条路线前加上$base_route
。希望这会有所帮助。