Laravel - 如何从 windows xampp 中的 Laravel 中删除 index.php
Laravel - How to remove index.php from Laravel in windows xampp
问题:
除了根主页之外,我的路由无法正常工作,我搜索了两天以找到解决此问题的方法,我发现我应该更改 .htaccess
文件,但解决方案没有解决任何问题对于我的情况,起初 url localhost/quotes/public
与我配合得很好,但在某些时候我不确定这个问题是什么
我试过的:
- 创建另一条路线,我确保没有路线只工作
家庭路线,除家庭外仍然无法正常工作
- 试图将我的 XAMP 上的 OverrideMode 从 None 更改为全部,但没有解决任何问题
- 试图手动输入 localhost/quotes/public/index。php 一切都太棒了
有效..
我的 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]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
正在进行:
- Windows 10
- XAMP
- Laravel 5.2.35
.htaccess
文件必须位于应用程序的根目录下。
在此文件中添加:
RewriteEngine On
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/ [L,NC]
假设您没有触及 Laravel 的原始架构,并且 public 数据仍在同一个地方:public/
文件夹
你也可以关注这个good tutorial
让我举例说明我的路线设置方式。
在app\Http\routes.php中,这是我的三个示例路线。
Route::get('/', function () {
$values = app('App\Http\Controllers\KeywordController')->index();
dd($values);
return view('welcome');
});
Route::get('googlefile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileGoogle();
dd($output);
});
Route::get('bingfile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileBing();
dd($output);
});
我在我的环境中设置了 WAMP。我在 app\Http\Controllers\KeywordController.php 做了一个控制器。如果我的浏览器设置为 localhost/googlefile,那么它将转到 KeywordController.php.
中的方法 printToFileGoogle()
请尝试与此类似的操作,并告诉我您是否遇到错误以及如果您执行了错误操作。
问题是您的 .htaccess
正在将所有内容重写到通常位于 {host}/index.php
的前端控制器。但是在您的应用程序中它位于 {host}/quotes/public/index.php
.
所以你有两个选择:
1.虚拟主机
在你的 XAMPP Apache 中设置一个虚拟主机,指向 ie。 myapp.local
到 htdocs/quotes/public
以下是如何实现此目的的示例:how to create virtual host on XAMPP. (Don't forget to add the host to your hosts file and have it point to your local macine on 127.0.0.1) You can then access your application on myapp.local/whatever-route-you-define
. Alternatively you forget about XAMMP and install the homestead virtual machine,它已为此进行了预配置。
2。重写规则
更改您的重写规则以将所有请求重写为 quotes/public/index.php
而不是 index.php
。我不是 htaccess 专家,但我相信它应该像改变这个一样简单:
RewriteRule ^ index.php [L]
对此:
RewriteRule ^ quotes/public/index.php [L]
请注意,您仍然需要通过 localhost/quotes/public/whatever-route-you-define
访问您的应用程序,这在我看来并不理想。您的开发版本应尽可能接近您的实时版本,如果您开始使用绝对和相对路径以及代码中的内容,事情迟早会变得一团糟。
就我个人而言,我会选择 Homestead,我一直都在使用它,一旦你拥有它,它就非常有用 运行。
顺便说一句,localhost/quotes/public/index.php
现在为您工作的原因是因为 RewriteCond %{REQUEST_FILENAME} !-f
告诉 Apache not 重写对实际存在的文件的任何请求(否则您将无法访问像您的 css 这样的静态资产)。
问题:
除了根主页之外,我的路由无法正常工作,我搜索了两天以找到解决此问题的方法,我发现我应该更改 .htaccess
文件,但解决方案没有解决任何问题对于我的情况,起初 url localhost/quotes/public
与我配合得很好,但在某些时候我不确定这个问题是什么
我试过的:
- 创建另一条路线,我确保没有路线只工作 家庭路线,除家庭外仍然无法正常工作
- 试图将我的 XAMP 上的 OverrideMode 从 None 更改为全部,但没有解决任何问题
- 试图手动输入 localhost/quotes/public/index。php 一切都太棒了 有效..
我的 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]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
正在进行:
- Windows 10
- XAMP
- Laravel 5.2.35
.htaccess
文件必须位于应用程序的根目录下。
在此文件中添加:
RewriteEngine On
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/ [L,NC]
假设您没有触及 Laravel 的原始架构,并且 public 数据仍在同一个地方:public/
文件夹
你也可以关注这个good tutorial
让我举例说明我的路线设置方式。
在app\Http\routes.php中,这是我的三个示例路线。
Route::get('/', function () {
$values = app('App\Http\Controllers\KeywordController')->index();
dd($values);
return view('welcome');
});
Route::get('googlefile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileGoogle();
dd($output);
});
Route::get('bingfile', function () {
$output = app('App\Http\Controllers\KeywordController')->printToFileBing();
dd($output);
});
我在我的环境中设置了 WAMP。我在 app\Http\Controllers\KeywordController.php 做了一个控制器。如果我的浏览器设置为 localhost/googlefile,那么它将转到 KeywordController.php.
中的方法 printToFileGoogle()请尝试与此类似的操作,并告诉我您是否遇到错误以及如果您执行了错误操作。
问题是您的 .htaccess
正在将所有内容重写到通常位于 {host}/index.php
的前端控制器。但是在您的应用程序中它位于 {host}/quotes/public/index.php
.
所以你有两个选择:
1.虚拟主机
在你的 XAMPP Apache 中设置一个虚拟主机,指向 ie。 myapp.local
到 htdocs/quotes/public
以下是如何实现此目的的示例:how to create virtual host on XAMPP. (Don't forget to add the host to your hosts file and have it point to your local macine on 127.0.0.1) You can then access your application on myapp.local/whatever-route-you-define
. Alternatively you forget about XAMMP and install the homestead virtual machine,它已为此进行了预配置。
2。重写规则
更改您的重写规则以将所有请求重写为 quotes/public/index.php
而不是 index.php
。我不是 htaccess 专家,但我相信它应该像改变这个一样简单:
RewriteRule ^ index.php [L]
对此:
RewriteRule ^ quotes/public/index.php [L]
请注意,您仍然需要通过 localhost/quotes/public/whatever-route-you-define
访问您的应用程序,这在我看来并不理想。您的开发版本应尽可能接近您的实时版本,如果您开始使用绝对和相对路径以及代码中的内容,事情迟早会变得一团糟。
就我个人而言,我会选择 Homestead,我一直都在使用它,一旦你拥有它,它就非常有用 运行。
顺便说一句,localhost/quotes/public/index.php
现在为您工作的原因是因为 RewriteCond %{REQUEST_FILENAME} !-f
告诉 Apache not 重写对实际存在的文件的任何请求(否则您将无法访问像您的 css 这样的静态资产)。