【问题标题】:Laravel routes in Shared Hosting not works properly共享主机中的 Laravel 路由无法正常工作
【发布时间】:2018-03-24 21:36:51
【问题描述】:

我遇到了与this another question 非常相似的问题,但该线程中提供的解决方案对我没有帮助。

我使用此 guide 将我的 Laravel 应用程序部署到共享托管服务(顺便说一句,该指南与链接问题的 one of the answers 非常相似)

下面是我的路由/web.php 文件

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::group(['prefix' => 'law', 'middleware' => ['ability:superadministrator,read-users|create-users']], function () {

    Route::get('/search', 'LawController@showSearchView');
    Route::get('/new', ['middleware' => ['permission:create-users'], 'uses' => 'LawController@showNewView']);

    Route::get('/find', 'LawController@find');
    Route::get('/edit/{id}', 'LawController@edit');

    //region post
    Route::post('/new', ['middleware' => ['permission:create-users'], 'uses' => 'LawController@store']);
    Route::post('/search', ['middleware' => ['permission:read-users'], 'uses' => 'LawController@search']);
    /*Route::post('/modify', ['middleware' => ['permission:create-users'], 'uses' => 'LawController@modify']);*/
    //endregion
});

Route::group(['prefix' => 'user', 'middleware' => ['ability:superadministrator,read-users|create-users']], function () {
    //..similar to the previous one
});
//some other route groups

问题是,我可以访问欢迎页面和登录页面。身份验证后,我转到主页,然后问题就开始了。除了我尝试的所有其他路线(如 mydomain.net/law/sea​​rch),我都会以某种无限循环再次进入主页。注销路由也可以正常工作。

奇怪的是,如果我尝试像 mydomain.net/blah 这样不存在的路由,我会去 Laravel 框架的知识 RouteNotFound/"NotFoundHttpException"。

我在 php 日志或浏览器控制台中没有收到任何错误。 javascript 工作正常。

我联系了主机服务的支持,以确保 Apache 启用了 mod_rewrite 并且显然是启用了。

我在谷歌上搜索了大约 3 个小时,并在 SO 中深入挖掘,但任何事情都有助于我理解问题。有什么建议吗?

如果有任何帮助,下面是 .htacces 文件:

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

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

杂项:

【问题讨论】:

  • mod_rewrite 开启了吗?
  • 根据支持人员的说法,是的,但从系统的角度来看,我无法确保
  • composer dump-autoload 部署之前?
  • 我在部署后制作了 if。 “部署”是托管目录中的 git clone 和 composer.phar install。我一步一步跟着这个guide
  • 听起来可能与中间件有关?例如,身份验证/会话不起作用,因此那些需要身份验证的路由会让您退缩。是directory permissions set correctly吗?

标签: php laravel routes shared-hosting


【解决方案1】:

将此添加到您的 .htaccess 文件中

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

此规则将在内部将 REQUEST_URI 的内容加载到 index.php

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2017-10-15
    相关资源
    最近更新 更多