从 laravel 路由中删除 index.php

Posted

技术标签:

【中文标题】从 laravel 路由中删除 index.php【英文标题】:remove index.php from laravel route 【发布时间】:2018-04-27 11:20:42 【问题描述】:

我有一个 laravel 5.4 over apache centos 服务器。

文件夹结构如下: /var/www/html

index.php 包含对项目主文件夹的引用。 该项目有效,但仅使用 ip:

myip/index.php/login

而不是

myip/login

如我所愿 我尝试了很多方法来删除它,但没有运气,这是我在 /var/www/html 中的 .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]
RewriteRule ^(.*)$ index.php/$1 [L]


# Handle Authorization Header
RewriteCond %HTTP:Authorization .
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]

【问题讨论】:

How can I remove "public/index.php" in the url generated laravel?的可能重复 我之前发现了这篇文章,但对我没有用……甚至不需要剪掉“公共”部分 apache配置中DocumentRoot是如何设置的? 设置为 /var/www/html 【参考方案1】:

您应该更改服务器配置以提供来自 Laravel 公共文件夹的文件,而不是更改 .htaccess 文件。

在编辑配置文件之前,为了安全起见,请复制默认配置文件以进行备份:cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.original

编辑文件/etc/httpd/conf/httpd.conf如下:

改变这一行:

DocumentRoot "/var/www/html" 

DocumentRoot "/var/www/project/public"

添加以下行以允许从 Laravel 公用文件夹中提供文件:

<Directory "/var/www/project/public">
    AllowOverride All
    Require all granted
</Directory>

运行sudo apachectl configtest 以确保您没有犯任何错误。你应该得到Syntax OK

重新启动 apache 服务器以应用新配置。 sudo systemctl restart httpd

最后在这个link处将.htaccess文件恢复到laravel自带的默认版本。

最好创建一个虚拟主机而不是更改默认配置。但是,如果您只有在服务器上的网站上,这将是可以的。

【讨论】:

现在发生的事情看起来很奇怪,请记住存储已获得“775”权限:ibb.co/frCXnb 看起来登录部分可见! 试试chmod -R 775 storage 我不知道登录表单是如何出现的。好奇怪!!【参考方案2】:

对于那些使用 laravel 7.x 的人:确保在项目的公共和根文件夹中都有 .htaccess 并包含以下内容

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

顺便说一下,不要忘记在 /etc/httpd/conf/httpd.conf 中将 AllowOverride 设置为 All(在 CentOS 上):

<Directory "/var/www/path/to/my/app/public">
    Options FollowSymLinks
    AllowOverride All
</Directory>

祝你好运。

【讨论】:

您好,您需要继续阅读 laravel 文档以进行部署和 Apache 部分,您将看到重写器,因为 apache 不支持重写规则【参考方案3】:

您需要继续阅读 laravel 文档 deployement/apache,您将看到需要将它们放入 apache 配置中的重写器规则。一切都会好起来的

【讨论】:

以上是关于从 laravel 路由中删除 index.php的主要内容,如果未能解决你的问题,请参考以下文章

如何从 laravel 5 中的 url 中删除 public/index.php?

从 Laravel 4 URL 中删除 index.php 并将 www 重写为非 www

Laravel index.php 路由问题

从 URL Laravel 5.3 中删除公共

Nginx 总是将 Laravel 路由重定向到默认的根 index.php 页面

删除 url 中的 Index.php 像“laravel-project/public/login”而不是“laravel-project/public/index.php/login”