使用 Laravel 进行子域路由

Posted

技术标签:

【中文标题】使用 Laravel 进行子域路由【英文标题】:Subdomain routing with Laravel 【发布时间】:2015-04-23 06:13:36 【问题描述】:

我在正确设置子域路由时遇到了一些问题。我认为我的机器上的 htaccess 或虚拟主机存在一些问题。

我的路线是这样的:

Route::group(array('domain' => 'store.munia.dk'), function()

    Route::get('/', array('as' => 'store', 'uses' => 'Store\PageController@getHome'));
    Route::get('faq', array('as' => 'store.faq', 'uses' => 'Store\PageController@getFaq'));
    Route::get('documentation', array('as' => 'store.documentation', 'uses' => 'Store\PageController@getDocumentation'));

这在本地工作,但在我的生产机器上,只有第一条路线可用。其他路线将获得:

未找到:在此服务器上未找到请求的 URL/文档。

来自 Apache。

有人知道这里会出现什么问题吗?我正在使用 Laravel 的默认 htaccess 文件,并且我没有对 Apache 设置进行任何更改。

这是我的虚拟主机配置:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

【问题讨论】:

试试store.munia.dk/index.php/faq 这行得通。那么我该如何处理子域呢?删除 index.php。没有子域就不需要它。 这听起来像子域没有启用.htaccess (AllowOverride All) 你能改变虚拟主机配置吗? 我是。虽然我可能需要一些指导。 您可以编辑您的问题并添加属于子域的虚拟主机吗? 【参考方案1】:

这里缺少的是虚拟主机配置中的AllowOverride 选项。此选项指定是否尊重 .htaccess 文件并应用其内容。这应该让它运行:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    <Directory "/var/www/html">
        AllowOverride all
    </Directory>

    ErrorLog $APACHE_LOG_DIR/error.log
    CustomLog $APACHE_LOG_DIR/access.log combined
</VirtualHost>

【讨论】:

【参考方案2】:

你应该在你的 apache2 中启用 mod_rewrite。您可以在您的网络服务器中简单地做到这一点

sudo a2enmod rewrite

之后你应该重启你的 apache2

sudo service apache2 restart

应该可以解决你的问题

【讨论】:

@Stromgren 如果应用程序的其余部分工作正常,这如何解决您的问题?只是好奇... 我在配置本地服务器时遇到了同样的问题,对我来说允许 mod_rewrite 有帮助 当然,但是如果 OP 已经运行了应用程序(在主域下),mod_rewrite 应该已经启用,否则什么都不会起作用。这就是为什么我有点困惑......

以上是关于使用 Laravel 进行子域路由的主要内容,如果未能解决你的问题,请参考以下文章

如果路由不在子域中,Laravel 子域路由重定向到 404

我的子域路由覆盖了我在 laravel 7 中的正常网络路由

Laravel 5,子域路由,带可选参数

子域 Laravel 路由和 Vue.js

Laravel 5.4 通过子域运行所有路由

任何域上的 Laravel 5 子域路由