如何将所有请求重定向到laravel 5中的public/folder

nou*_*ine 21 .htaccess laravel

我有一个经典的Larevel 5项目结构,我需要将所有请求重定向到public/.

我在经典的托管环境中,因此public/是我的文档根目录的子文件夹.

我会想象它可以通过.htaccess完成,但我仍然需要弄清楚如何.有人可以帮忙吗?

谢谢

Muh*_*lim 38

有两种解决方案:

1.将.htaccess与mod_rewrite一起使用

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
Run Code Online (Sandbox Code Playgroud)

2.您可以添加包含以下代码的index.php文件,并将其放在根Laravel文件夹(public_html文件夹)下.

<?php
header('Location: public/');
Run Code Online (Sandbox Code Playgroud)

  • 按照我的首选解决方案(您的选项 1)@MuhammadSumonMollaSelim 我发现,如果我指向目标服务器上以反斜杠结尾的路径,我会在网址中得到 /public/ 。即对 www.test.com/page/ 的请求变为 www.test.com/public/page (2认同)

Gil*_*ino 15

您不需要更改 Laravel 默认的public/.htaccess文件中的任何内容。

只要创建一个新的.htaccess在同级别的公共文件夹和添加以下内容吧:

DirectoryIndex index.php

RewriteEngine On 
RewriteRule ^$ public/index.php [L]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
Run Code Online (Sandbox Code Playgroud)

就这么简单!


小智 7

这是另一个答案的摘录,也可能对您有所帮助.

-

  • 修改您的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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 确保你有正确的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>
    
    Run Code Online (Sandbox Code Playgroud)