Php 带子域的laravel无效路由操作

Php 带子域的laravel无效路由操作,php,laravel,Php,Laravel,向路由中添加子域的正确方法是什么?我有一个laravel/homestead项目在我的本地计算机上工作,但当我将其移动到HostGator(共享主机服务器)时,它就不再工作了。主页可以正常工作,但是子页面的链接不能正常工作 例如,以下路线在我的本地版本上运行良好: Route::get('/appointments', 'AppointmentController@index'); 但是,如果我在远程服务器上使用该路由,它将转到teknow.net/appoints,而不是teknow.net

向路由中添加子域的正确方法是什么?我有一个laravel/homestead项目在我的本地计算机上工作,但当我将其移动到HostGator(共享主机服务器)时,它就不再工作了。主页可以正常工作,但是子页面的链接不能正常工作

例如,以下路线在我的本地版本上运行良好:

Route::get('/appointments', 'AppointmentController@index');
但是,如果我在远程服务器上使用该路由,它将转到teknow.net/appoints,而不是teknow.net/medverter/appoints

所以我按照这里的指示: 并添加了如下前缀:

Route::prefix('MedAverter')->group(function() {
  Route::get('/appointments', 'AppointmentController@index');
});
但这也不行。它也会转到/teknow.net/appoints

我还尝试将路线更改为:

Route::get('/MedAverter/appointments', 'AppointmentController@index');
但这也传到了teknow.net/appoints

有人知道我做错了什么吗

编辑:我转到我的HostGator cPanel,查看了我的所有子域,发现我的子域根是medverter.teknow.net,它链接到medverter.teknow.net/medverter的文档根,该文档根被重定向到。因此,我将我的文件夹从medaverter重命名为medaverter,以匹配子域重定向

下面是一个屏幕截图,显示了我在cPanel中看到的子域、根域、文档根和重定向列

当您尝试
php artisan route:list | grep约会时

它打印:

[~/www/MedAverter]#php工匠路线:列表| grep约会
||获取|头部|医疗回避/预约| |应用程序\Http\Controllers\AppointmentController@index|网|
这意味着您的路线
MedAverter/预约
正在为laravel工作

错误404
表示找不到路线

所以我认为您的nginx配置有问题

当我尝试的时候。 它确实找到了错误为500的路线。

因此,我认为您已经在nginx配置中定义了这段代码:

  location = / {
    rewrite ^ https://tekknow.net/MedAverter;
  }

解决方案1: 更改回
重写^https://tekknow.net/;

(我不熟悉hostGatar cPanel,但我认为您可以将
medverter.teknow.net/medverter
重定向到`)

在您的laravel项目中,您需要将
前缀MedAverter
保留到
约会

解决方案2: 保留
重写
代码。这意味着您不需要更改cPanel重定向

并删除laravel routes中的
前缀MedAverter
。HostGatar(Nginx)将使用此前缀自动重定向
MedAverter
用于
约会

清除所有缓存 您遇到的问题可能是由于缓存造成的。所以,通过跑步来确保这不是问题所在

php artisan route:clear && php artisan view:clear && php artisan config:clear && php artisan cache:clear && php artisan clear-compiled
基本URL 如果你想更改你的Laravel应用程序的基本URL,那已经是一件事了

多路径前缀 在这种情况下,路径中有多个具有相同前缀的路由。如果是这种情况,可以使用管线组简化结构

Route::prefix('medaverter')->group(function () {
    Route::get('/', function () {
        // Path /medaverter
    });
    Route::get('appointments', function () {
        // Path /medaverter/appointments
    });
});
这将分别转到
teknow.net/medverter
teknow.net/medverter/appointments
。您还可以创建另一个前缀,如
testing
,以相同的方式进行配置,然后转到
teknow.net/testing
teknow.net/testing/where

名称空间前缀 当您按路由前缀对路由进行分组时,它们的控制器很可能具有类似的PHP名称空间。在medaverter示例中,所有medaverter路由的控制器都可能位于medaverter命名空间下

Route::namespace('Medaverter')->group(function () {
    // App\Http\Controllers\Medaverter\AppointmentController
    Route::get('medaverter/appointments', 'AppointmentController@index');
});

您可以使用路由组来实现此目的,这里是一个示例,请尝试以下操作:

Route::group(['prefix' => 'medaverter'], function () {
        Route::get('/appointments', [AppointmentController::class, 'index'])->name('index');
     
});


我有点困惑。您提到了“子域”,但从代码来看,您似乎试图在子路径“medaverter”中部署Laravel。那么它是子域(例如
medverter.teknow.net
)还是子路径(例如
teknow.net/medverter
)?我认为您还应该描述您的部署目录结构,以帮助其他人分析您的问题您是否要转到
medverter.teknow.net/appointments
?在我的HostGator帐户中,medverter.teknow.net被定义为转到www.teknow.net/medverter。我不知道你是将其称为子域还是子路径。哪个域正在读取你的应用程序公用文件夹?是的,如果我输入medverter.teknow.net,我将进入teknow.net/medverter。我有很多子域。每一个都有自己的公用文件夹。我在第一个逗号前添加了一个“],然后它再次将我带到了teknow.net/appointments,而不是teknow.net/medverter/appointments。根据您的指示,我清除了缓存。同样的结果。我按照您的说明在多路径前缀部分实现了代码。同样的结果。控制器不包含medaverter名称空间,因为本地版本不使用它。是否也尝试使用名称空间前缀?只是尝试如下:Route::Namespace('medaverter')->group(function(){Route::get('medaverter/Appoints'),'AppointmentController@index'); }); 但同样的结果是从路由中删除了组前缀。现在当我这样做时,它说:404 |找不到。如果我找到了,它也会说:404 |找不到。我在谷歌上搜索了nginx,它说这是一种程序。据我所知,我没有使用它,除非它是HostGator使用的默认值。@user3217883我不熟悉hostGatar cPanel,但我认为您可以将medaverter.teknow.net/medaverter重定向为不带medaverter,但laravel路由保留前缀
medaverter
。然后尝试Teknow.net/MedAverter/appointments,我可以在hostgator中禁用子域的重定向。然后我将路由放回如下组中:route::group(['prefix'=>'medverter'],function(){route::get('medverter/appointments','AppointmentController@index'); }); 但同样的结果@user3217883 u plz更改重定向到
http://www.tekknow.net/
让我访问该站点?我也尝试过这样的路径:route::group(['prefix'=>'medverter']),function(){route::get('/appoints',Appointm
Route::group(['prefix' => 'medaverter'], function () {
    Route::get('/appointments', 'AppointmentController@index');
 
});