【发布时间】:2017-09-28 08:46:47
【问题描述】:
我在启动 Laravel 项目并在共享主机帐户上运行时遇到了一些问题。当然,这在本地运行良好,几天前在主机帐户上运行良好;我不确定我可以进行哪些更改以使其停止工作。
既然是共享主机,我觉得我没有能力修改httpd.conf,但我当然可以修改.htaccess。
我想要一个存储多个应用程序的地方,所以我的计划是在我的 Web 根目录中为每个 Laravel 项目创建一个新文件夹。这就是我目前的设置方式(不确定这是否是一个好方法):
然后将每个文件夹的公用文件夹映射到子域:
- http://app1.domain.com => 指向 App1/public
- http://app2.domain.com => 指向 App2/public
问题是:当我尝试访问除根页面 '/' 之外的任何路线时,我会收到 404 错误。这是来自主机的通用 404,而不是来自 Laravel。当我尝试通过子域访问时,我收到 500 错误。
如果我访问:
- http://example.com/App1/public => 有效!
-
http://example.com/App1/public/route2 =>
404 error - http://example.com/App1/public/index.php/route2 => 有效!
- http://app1.example.com => 有效!
-
http://app1.example.com/route2 =>
500 error(错误立即发生)
我在 httpd.conf 中看到了其他提到更改设置的问题,但我认为我无权这样做。鉴于这以前对我有用,我认为除此之外还有一个解决方案。
我可以做些什么来防止这些错误?
另外,为什么从http://example.com/App1/public 和http://app1.example.com 访问页面时会出现不同的错误?
任何帮助将不胜感激..!
不确定这是否有帮助,但这是我的 .htaccess 代码(Laravel 5.4.21 默认):
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
【问题讨论】:
-
你得到什么样的 500 错误?从主机还是从应用程序?如果您将
APP_DEBUG设置为true,则来自应用程序的500 将留下登录laravel.log -
感谢@MarcoAurélioDeleu,不幸的是这只是通用的
500 Internal Server Error,不是来自Laravel -
听起来您的
.htaccess没有得到处理。可能是文件权限或服务器阻止它。 -
再次感谢。我确认 .htaccess 正在处理中。 (我添加了一堆无效文本并保存了它;在出现 500 错误后;将其改回后,页面加载正常)。不过,其他路线的问题仍然存在
标签: php apache laravel .htaccess