【问题标题】:How to remove public from url in laravel 5.2如何在 laravel 5.2 中从 url 中删除 public
【发布时间】:2019-05-09 20:27:58
【问题描述】:

我在我的共享主机服务器中使用 Laravel 5.2。我想在不将 server.php 更改为根目录中的 index.php 的情况下从 url 中删除 public,因为这样做 .env 和其他文件是公开可见的。我的 .htaccess 如下所示:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,NC]

# Handle Front Controller...

RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
RewriteRule ^(css|js|images|media)/(.*)$ /public/$1/$2 [L,NC]

</IfModule>

【问题讨论】:

  • 为什么不将域指向公共目录?
  • 我该怎么做,这是唯一的选择吗? @KamalPaliwal

标签: php laravel apache .htaccess laravel-5.2


【解决方案1】:

您需要从 cpanel 将您的域指向公共文件夹。

将您的 .htaccess 文件从 /public 目录移动到根目录,并将其内容替换为以下代码:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

【讨论】:

    【解决方案2】:

    创建新的 .htaccess 文件在根目录 并粘贴以下代码

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_URI} !^public
        RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>
    
    # php -- BEGIN cPanel-generated handler, do not edit
    # Set the “ea-php56” package as the default “PHP” programming language.
    <IfModule mime_module>
      AddType application/x-httpd-ea-php56___lsphp .php .php5 .phtml
    </IfModule>
    # php -- END cPanel-generated handler, do not edit
    

    【讨论】:

      【解决方案3】:

      最好的解决方案是将您的 apache 文档根目录指向 laravel 的公用文件夹。 但正如您所说,您使用的是共享主机,那么可能对您来说是不可能的。

      现在要在 URL 中不公开访问 laravel 应用程序,请遵循此问题 Laravel 5 - Remove public from URL

      此外,您担心其他文件夹(如 app、config 等)无法从浏览器访问。因此,您可以放置​​一个.htaccess 在您要阻止浏览器访问的每个文件夹中包含内容 Deny from all 的文件。

      【讨论】:

        【解决方案4】:

        在根文件夹中制作 .htaccess 文件:

        <IfModule mod_rewrite.c>
         RewriteEngine On
         RewriteRule ^(.*)$ public/$1 [L]
        </IfModule>
        

        【讨论】:

          【解决方案5】:

          这是我找到的确切工作解决方案。解决方案来自here,由 Pallav Nagar 回答

          在根目录中创建 .htaccess 文件并放置如下代码。

          <IfModule mod_rewrite.c>
              <IfModule mod_negotiation.c>
                  Options -MultiViews
              </IfModule>
              RewriteEngine On
              RewriteCond %{REQUEST_FILENAME} -d [OR]
              RewriteCond %{REQUEST_FILENAME} -f
              RewriteRule ^ ^$1 [N]
          
              RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
              RewriteRule ^(.*)$ public/$1 
          
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteRule ^ server.php
          </IfModule>
          

          【讨论】:

          • 与检查的正确答案没有区别。
          猜你喜欢
          • 2018-03-14
          • 2023-03-23
          • 2016-07-30
          • 1970-01-01
          • 2015-01-14
          • 2020-06-07
          • 1970-01-01
          • 1970-01-01
          • 2015-11-17
          相关资源
          最近更新 更多