如何在宅基地机器上和本地服务时显示 Laravel 相同的路由

How to display Laravel route the same on a homestead machine and when served locally

我正在尝试使用以下 Homestead.yaml

从 Homestead 机器为我的 Laravel 应用程序提供服务
name: homestead-fontys
ip: "192.168.10.12"
memory: 2048
cpus: 2
provider: virtualbox

authorize: c:/Users/karin/.ssh/id_rsa.pub

keys:
    - c:/Users/karin/.ssh/id_rsa

folders:
    - map: c:/Users/karin/Documents/uni/work/develop/laravel-forum/forum/
      to: /home/vagrant/code

sites:
    - map: exampleurl.test
      to: /home/vagrant/code/public
      type: apache
      php: "7.2"

databases:
    - forum

features:
    - mariadb: false
    - ohmyzsh: false
    - webdriver: false

我有以下路线:

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

Route::get('/hello-world', function () {
    return view('helloworld');
});

当我从 git bash 提供网站服务时,我可以转到 http://localhost:8000/ to view the first URL. However, if I go to http://exampleurl.test 我得到一个 No input file specified. 要访问欢迎页面,我必须附加 /index.php 到 URL。当 Homestead 运行 时,我还没有弄清楚 /hello-world 的 URL 是什么。

我怎样才能确保在 URL http://exampleurl.test 上提供欢迎页面并且在 http://exampleurl.test/hello-world

上提供 hello-world

看来 apache 中的重写规则配置不正确,因此您需要仔细检查一下。

是的,您需要通过 index.php(也称为前端控制器)访问所有内容,因此要访问 hello-world,您需要访问 http://exampleurl.test/index.php/hello-world

我通过以下方式修复了它:

1.edited 我的 /public 目录中的 .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 ^(.*)/$ / [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
  1. 将项目根目录中的 server.php 重命名为 index.php

  2. 运行 vagrant reload --provision