动态虚拟主机使用 Laravel 给出 500 错误

Posted

技术标签:

【中文标题】动态虚拟主机使用 Laravel 给出 500 错误【英文标题】:Dynamic Virtual Host gives 500 error with Laravel 【发布时间】:2016-08-12 09:08:46 【问题描述】:

我正在尝试使用虚拟主机创建一个动态开发环境。 现在我有:

<VirtualHost *:80>
   UseCanonicalName Off
   VirtualDocumentRoot "C:\xampp\htdocs\%1\public"
   # available aliases to use
   ServerAlias *.dev
</VirtualHost>

它适用于 Laravel 的默认路由:

Route::get('/', function () 
    return view('home.index');
);

但是任何其他路由都会给我很多内部重定向的 500 错误。 我使用 Laravel 5.2,除了 routes.php 和一些默认更改之外,没有任何更改。

当我将这样的域分配为 VirtualHost 时,一切正常:

<VirtualHost *:80>
  ServerName example.dev
  VirtualDocumentRoot none
  DocumentRoot "C:\xampp\htdocs\example\public"
</VirtualHost>

如何解决这个问题,以便我可以使用动态域名,这样我就不必手动添加所有域。

提前谢谢你, 斯蒂芬·弗兰森

编辑

当我使用这个时:

http://example.dev/index.php/test

页面加载正确,但这不是我想要的。 那么如何从 url 中删除 index.php 呢?我已经检查并且所有模块都正确加载了这是我的.htaccess:

<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>

编辑

发现当我把RewriteRule ^ index.php [L]改成RewriteRule ^(.*)$ /index.php/$1 [L]

但我仍然不明白为什么它在手动添加的虚拟主机上有效,但在动态生成的虚拟主机上无效,有人对此有解释吗?

【问题讨论】:

检查这个指南我将它用于 laravel ***.com/questions/27754367/… 感谢您的评论,但您通过将每个“项目”添加到虚拟主机来使用 VirtualHost。那部分确实对我有用,但我不喜欢手动添加它们,因为要添加的东西太多了。因此,我希望每个目录(例如“example”)都引用“example.dev”,这部分不起作用jet 【参考方案1】:

我遇到了同样的问题。我找到了解决办法。

如果.htaccess文件不在根目录中,则转到根目录上的文件,然后它将在从那里剪切并粘贴到根目录中的公共文件夹中可用

更改以下代码。

重写规则 ^ index.php [L]

重写规则 ^(.*)$ /index.php/$1 [L]

【讨论】:

【参考方案2】:

我猜你重写模块(mod_rewrite)被禁用了。在 apache.conf 中检查它

也许漂亮的 URL 部分可以帮助你。 https://laravel.com/docs/5.1

【讨论】:

谢谢,但这会给我一个 404/403 而不是 500 错误

以上是关于动态虚拟主机使用 Laravel 给出 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

axios 向 laravel 发布请求,给出 500 错误

Laravel 路由在特定控制器名称上给出 500 错误

使用 Laravel 8 使用动态路由获取错误 500

部署在 CodePipeline 中的 Laravel Elastic Beanstalk 应用程序给出 500 SERVER ERROR

Laravel 表单返回,共享主机上的 500 服务器错误

Cpanel 共享主机中的 Laravel 5.5 错误 500