你如何将所有请求重定向到 laravel 5 中的 public/ 文件夹
Posted
技术标签:
【中文标题】你如何将所有请求重定向到 laravel 5 中的 public/ 文件夹【英文标题】:How do you redirect all request to public/ folder in laravel 5 【发布时间】:2016-10-28 16:09:28 【问题描述】:我有一个经典的 Larevel 5 项目结构,我需要将所有请求重定向到 public/
。
我在经典托管环境中,所以public/
是我的文档根目录的子文件夹。
我想它可以通过 .htaccess 完成,但我仍然需要弄清楚如何。有人可以帮忙吗?
谢谢
【问题讨论】:
搜索.htaccess、laravel 和公众:***.com/search?q=%5B.htaccess%5D+%5Blaravel%5D+public 【参考方案1】:如果您使用 apache,请使用以下行将 .htaccess 文件添加到您的根目录:
RewriteEngine on
RewriteCond %REQUEST_URI !^public
RewriteRule ^(.*)$ public/$1 [L]
并确保您的 apache 重定向和重写模块工作正常。 您可以使用 vhost 将所有请求重定向到您的公共目录,并将公共设置为项目的根目录。
【讨论】:
【参考方案2】:如果你使用 cPanel,那么:
1.转到文件夹: /var/cpanel/userdata/my_domain
2.编辑两个域: my.domain 和 my.domain_SSL
添加到文档根部分/public:
documentroot:/home/user/public_html/public
3.重建 Apache 配置: /scripts/rebuildhttpdconf && service httpd restart
【讨论】:
不是 op 要求的。【参考方案3】:您无需更改 Laravel 默认的 public/.htaccess 文件中的任何内容。
只需在您的 public 文件夹的同一级别中创建一个新的 .htaccess 并将以下内容添加到其中:
DirectoryIndex index.php
RewriteEngine On
RewriteRule ^$ public/index.php [L]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
就这么简单!
【讨论】:
【参考方案4】:理想的情况是将/home/user/public
作为来自/home/user/laravel/public
的符号链接。
【讨论】:
【参考方案5】:这是another answer 的摘录,也可能对您有所帮助。
--
修改您的 public_html/.htaccess
以将所有请求重定向到 public
子文件夹。
# public_html/.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect All Requests To The Subfolder
RewriteRule ^ /public
</IfModule>
确保您拥有正确的public_html/public/.htaccess
(GitHub)。
# public_html/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 ^(.*)/$ /$1 [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>
【讨论】:
它也适用于 CodeIgniter 4。感谢您的帮助。 这个 laravel 废话随着每个版本的变化而变化。我在 Laravel 5 安装中有这个。同样的事情在 Laravel 7 安装中根本不起作用。是的,XAMPP 东西的定义完全一样。但是现在,Yii 和 Slim,他们将开箱即用。 Laravel 总是给我带来问题。【参考方案6】:有两种解决方案:
1.将 .htaccess 与 mod_rewrite 一起使用
RewriteEngine on
RewriteCond %REQUEST_URI !^public
RewriteRule ^(.*)$ public/$1 [L]
2。您可以添加一个包含以下代码的 index.php 文件并将其放在您的 Laravel 根文件夹(public_html 文件夹)下。
<?php
header('Location: public/');
【讨论】:
这似乎不能 100% 正常工作,如果我去localhost
它说 not found 而当我去 localhost/index.php
它给出laravel 主页。看来您必须特别输入完整的文件名。这种行为的任何解决方案?
@JohannesB 你的开发环境是什么?
LAMP 堆栈,x86_64 Linux 4.15.12-1-ARCH
,Apache/2.4.29
,mysql Ver 15.1 Distrib 10.1.31-MariaDB
,PHP 7.2.3
This 是我现在使用的,它重定向到 index.php 页面来解决这个问题,但它仍然看起来很奇怪,不是正确的方法
按照我的首选解决方案(您的选项 1)@MuhammadSumonMollaSelim 我发现如果我指向目标服务器上以反斜杠结尾的路径,我会在 url 中得到 /public/。即对 www.test.com/page/ 的请求变为 www.test.com/public/page以上是关于你如何将所有请求重定向到 laravel 5 中的 public/ 文件夹的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 如何将所有 404 错误重定向到主页
Laravel 5.4 POST 到 API 重定向 302 而不是返回验证错误