你如何将所有请求重定向到 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-ARCHApache/2.4.29mysql Ver 15.1 Distrib 10.1.31-MariaDBPHP 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 而不是返回验证错误

在laravel中发布请求后如何重定向回上一页?

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

Laravel 表单请求动态字段在重定向时消失

如何使 Laravel 5 重定向到没有哈希(#)的 Angular 路由?