从 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
Nginx 总是将 Laravel 路由重定向到默认的根 index.php 页面
删除 url 中的 Index.php 像“laravel-project/public/login”而不是“laravel-project/public/index.php/login”