【问题标题】:Routing within Laravel? .htaccess在 Laravel 中路由? .htaccess
【发布时间】:2016-03-04 22:31:22
【问题描述】:

我目前正在阅读文档并完成此快速入门指南: http://laravel.com/docs/5.1/quickstart#adding-tasks

我正在使用 Wamp 并在“www/laravel/quickstart5/”中安装了这个 Laravel 应用 通过 localhost/laravel/quickstart5/public/ 访问索引可以正常工作 当我提交一个新任务时,我被重定向到 "localhost/task/"

这是我的 routes.php

<?php


use App\Task;
use Illuminate\Http\Request;

/**
 * Display All Tasks
 */
Route::get('/', function () {
    $tasks = Task::orderBy('created_at', 'asc')->get();

    return view('tasks', [
        'tasks' => $tasks
    ]);
});
/**
 * Add A New Task
 */
Route::post('/task', function (Request $request) {
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);

    if ($validator->fails()) {
        return redirect('/')
            ->withInput()
            ->withErrors($validator);
    }

    $task = new Task;
    $task->name = $request->name;
    $task->save();

    return redirect('/');

    // Create The Task...
});

/**
 * Delete An Existing Task
 */
Route::delete('/task/{id}', function ($id) {
    Task::findOrFail($id)->delete();

    return redirect('/');
});

我在 /app/ 中有一个名为 Task.php 的文件

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //
}

我不明白这个表单是如何工作的。 "&lt;form action="/task" method="POST" class="form-horizontal"&gt;"

我唯一得到的是我想我应该更改“/public”文件夹中的 .htaccess

当前.htaccess

<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]

【问题讨论】:

标签: php .htaccess laravel


【解决方案1】:

/task 将始终相对于根。实际上,您有很多选项可以“修复”这个问题 - 没有一个涉及编辑 .htaccess 文件。

  1. 使用url 辅助函数。这将生成一个绝对 URL。在这种情况下,它将是localhost/laravel/quickstart5/public/task。

    action="{{ url('task') }}"
    
  2. 如果您为路由命名,则可以使用 route 辅助函数来生成绝对 URL。

    action="{{ route('task') }}"
    
  3. 从您最喜欢的 CLI 运行 php artisan serve。然后,您可以通过http://localhost:8000 访问您的 Laravel 项目。

【讨论】:

  • redirect('/') 是问题的真正根源,而不是表单操作。
  • @Cryode 是什么让你这么说?他的表单永远不会提交,因为通过在他的 URL 前加上一个斜杠,他的操作 URL 现在是相对于 Web 服务器的根目录,也就是 localhost。
  • 谢谢,url 辅助函数立即解决了这个问题!
  • 我有另一个表单提交这个:&lt;form action="{{ url('/task/') }}{{ $task-&gt;id }}" method="POST"&gt; 虽然由于某种原因我被重定向到页面 localhost/laravel/quickstart5/public/task5 没有最后一个“/ " 在 /task 之后,我通过删除路由方法调用中的“/”来解决它。所以我让它工作了,但我觉得这个问题很奇怪。
  • @user2479698 试试这个:{{ url('/task/' . $task-&gt;id) }}
【解决方案2】:

您也可以添加到您的 vhosts 文件中:

<VirtualHost *:80>
    DocumentRoot "c:/wamp/www/laravel/quickstart5/public"
    ServerName quickstart5.local
</VirtualHost>

然后将此行添加到您的主机文件并重新启动 apache

127.0.0.1 quickstart5.local

现在您可以通过以下方式访问您的项目:http://quickstart5.local

有关执行上述操作的更详细指南,请参见此处:https://www.kristengrote.com/blog/articles/how-to-set-up-virtual-hosts-using-wamp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 2021-05-09
    • 2022-01-02
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-09-29
    相关资源
    最近更新 更多