如何在Laravel 5.2中从URL删除public

时间:2018-12-08 06:47:15

标签: php laravel apache .htaccess laravel-5.2

我在共享主机服务器中使用Laravel 5.2。我想从url中删除public而不将根目录中的server.php更改为index.php,因为.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>

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

创建新 根目录中的.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 :(得分:0)

在根文件夹中,使用以下命令制作.htaccess文件:

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

答案 4 :(得分:0)

这是我找到的确切的工作解决方案。解决方案取自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>