Php “拉维根路线”/&引用;不';t在子域上的前缀路由内工作

Php “拉维根路线”/&引用;不';t在子域上的前缀路由内工作,php,laravel,routes,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. Rou

我有以下路线的项目:

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,没有任何错误。所有后续路由(如管理/页面)都可以正常工作

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>

选项-多视图
重新启动发动机
RewriteCond%{REQUEST_FILENAME}-d[或]
RewriteCond%{REQUEST_FILENAME}-f
重写规则^^$1[N]
重写条件%{REQUEST\u URI}(\.\w+$)[NC]
重写规则^(.*)$public/$1
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^server.php

我希望/admin路径显示仪表板视图,但我得到一个空白页面。如果没有错误,问题在哪里?

像这样建立路由列表有帮助吗

Route::group(
[
'域'=>'{account}.app.test',
'prefix'=>'admin',//这是URL前缀
'作为'=>'管理员',//这将预先挂起到路由名称。
'middleware'=>'auth:admin',
'名称空间'=>'管理员'
],
函数(){
路由::获取('/','DashboardController@index')->name('dashboard');//使用'as'属性,这将成为'admin.dashboard'
路由::资源('pages','PageController')->除了(['show']);
}
);

您可以通过在
.env
文件中设置您的管理域和用户域,然后使用
路由::域
这样做:

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

Route::domain(env('APP_USER_URL'))->group(function() {
    Route::get('/', 'UserController@index');
});
无需触摸您的
htaccess
,只需确保您的两个域都路由到您的laravel公共目录

我找到了答案;)


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

您是否也使用子域进行了本地测试?嗯,我没有。我在本地开发机器上使用valet和nginx,服务器上是apache。但我将尝试创建一个子域并在本地进行测试。我在本地计算机上创建了一个子域,一切正常/管理路由正在打开。是否有原因要重写到
server.php
而不是
index.php
?是的。htaccess文件位于项目的根目录中,而不是公用文件夹中。服务器文档根目录已配置为位于项目/var/www/html的根目录中,而不是位于公用文件夹/var/www/html/public中。这就是为什么我使用htaccess重写server.phpNo,这没有改变任何东西。