【问题标题】:Call to controller redirects to root调用控制器重定向到根
【发布时间】:2014-09-06 16:46:46
【问题描述】:

我是 Laravel 的新手,我正在尝试创建我的第一条路线,但它只有在我在 url 中输入 ID 时才有效。如果我没有输入任何 ID(以斜杠结尾),它会将我重定向到服务器的根目录。我读到 here 我应该删除 Laravel 在 .htaccess 中的重写规则,但它仍然不起作用。

我的路线:

Route::get('musibitmedias/{id}', 'MusibitmediasController@getIndex');
Route::get('musibitmedias', 'MusibitmediasController@getIndex');

我的控制器的一部分:

# Handles "GET /" request
public function getIndex($id)
     {
        return View::make('musibitmedia')->with('musibitmedias', Musibitmedia::all());
     }

我的 .htaccess 文件的内容

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    # RewriteRule ^(.*)/$ /$1 [L,R=301]

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

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: .htaccess redirect laravel-4 laravel-routing


    【解决方案1】:

    在 ../public/.htaccess 中散列这一行

    RewriteRule ^(.*)/$ /$1 [L,R=301]
    

    # RewriteRule ^(.*)/$ /$1 [L,R=301]
    

    【讨论】:

      【解决方案2】:

      由于这些路由都指向同一个方法,因此您可以通过指示id 参数可能存在或可能不存在并在控制器方法中为其设置默认值来使用一个路由来执行此操作。

      路线:

      Route::get('musibitmedias/{id?}', ['uses' => 'MusibitmediasController@getIndex']);
      

      控制器:

      public function getIndex($id = false)
      {
      
         // Is there other code involved?  Where is `$id` used?
      
         return View::make('musibitmedia', ['musibitmedias' => Musibitmedia::all()]);
      
      }
      

      如果您在当前设置中遇到一些奇怪的行为,这并不奇怪,如果您点击/musibitmedias,它会期望传递一个参数。

      【讨论】:

      • 谢谢先生。格里芬,您的解决方案解决了我遇到的另一个问题 :-) 但是如果我这样调用我的控制器:mysite.com/public/controller/,我仍然被重定向到不存在的 mysite.com/controller。似乎尾部斜线是问题所在。
      猜你喜欢
      • 2020-07-16
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2020-08-04
      • 2016-08-20
      相关资源
      最近更新 更多