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,这没有改变任何东西。