Laravel根路由“ /”在子域中的前缀路由中不起作用

时间:2019-09-04 08:37:08

标签: php laravel routes

我的项目有以下路线:

Route::namespace('Admin')->prefix('admin')->group(function () {
    Route::group(['middleware' => 'auth:admin'], function () {
    // this is working on my local machine but it's skipped on server which is a subdomain.
        Route::get('/', 'DashboardController@index')->name('admin.dashboard'); 

        // other routes here. all of them working fine
        Route::resource('pages', 'PageController')->except(['show']);
    });
});
Route::get('/', 'HomeController@index'); // this is working fine

在我的本地计算机上打开app.test / admin时,一切正常。如果我没有登录,我可以看到我的登录页面,如果我是,则可以看到仪表板视图。 在服务器上,这是一个子域,如果我打开subdomain.app.com/admin,我什么也看不到。服务器响应为200,无任何错误。所有后续路由(例如admin / pages)都可以正常工作。

apache中的文档根目录设置为项目的根目录,而不是公共文件夹中的根目录。我在根目录中使用以下.htaccess文件。

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

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

我希望/ admin路由显示仪表板视图,但是会出现空白页。没有错误的地方会出现什么问题?

3 个答案:

答案 0 :(得分:0)

建立这样的路线列表完全有帮助吗?

    Route::group(
        [
            'domain' => '{account}.app.test',
            'prefix' => 'admin', // This is the URL prefix
            'as' => 'admin.', // This gets pre-pended to the route names.
            'middleware' => 'auth:admin',
            'namespace' => 'Admin'
        ],
        function () {
            Route::get('/', 'DashboardController@index')->name('dashboard'); // with 'as' property, this becomes 'admin.dashboard'
            Route::resource('pages', 'PageController')->except(['show']);
        }
    );

答案 1 :(得分:0)

您可以通过在.env文件中设置管理域和用户域,然后像这样使用Route::domain来做到这一点:

Route::domain(env('APP_ADMIN_URL'))->group(function() {
    Route::get('/', 'AdminController@index');
});

Route::domain(env('APP_USER_URL'))->group(function() {
    Route::get('/', 'UserController@index');
});

除了确保您的两个域都路由到您的laravel公共目录之外,无需触摸您的htaccess

答案 2 :(得分:0)

我找到了答案;)

问题是我的公用文件夹中有一个名为admin的文件夹,与我尝试访问的路由相同。将文件夹重命名为随机名称可以修复我的/ admin路由。