如何从 laravel 5.2 中的 url 中删除 public
How to remove public from url in laravel 5.2
我在我的共享主机服务器中使用 Laravel 5.2。我想在不将根目录中的 server.php 更改为 index.php 的情况下从 url 中删除 public .env 和其他文件 publicly 可见。我的 .htaccess 如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ / [L,NC]
# Handle Front Controller...
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/ [L,QSA]
RewriteRule ^(css|js|images|media)/(.*)$ /public// [L,NC]
</IfModule>
您需要将您的域指向 cpanel 中的 public 文件夹。
或
将您的 .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 ^ ^ [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
对此的最佳解决方案是将您的 apache 文档根目录指向 laravel 的 public 文件夹。
但是正如您所说,您正在使用共享主机,那么 可能 对您来说是不可能的。
现在要在 url 中访问没有 public 的 laravel 应用程序,请遵循此问题
此外,您还担心无法从浏览器访问其他文件夹,例如 app、config 等。因此,您可以放置一个 .htaccess
在您要阻止从浏览器访问的每个文件夹中包含内容 Deny from all
的文件。
新建
根目录中的 .htaccess 文件
并粘贴以下代码
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/ [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
在根文件夹中制作 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
这是我找到的确切工作解决方案。解决方案取自 ,由 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 ^ ^ [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
我在我的共享主机服务器中使用 Laravel 5.2。我想在不将根目录中的 server.php 更改为 index.php 的情况下从 url 中删除 public .env 和其他文件 publicly 可见。我的 .htaccess 如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ / [L,NC]
# Handle Front Controller...
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/ [L,QSA]
RewriteRule ^(css|js|images|media)/(.*)$ /public// [L,NC]
</IfModule>
您需要将您的域指向 cpanel 中的 public 文件夹。
或
将您的 .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 ^ ^ [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
对此的最佳解决方案是将您的 apache 文档根目录指向 laravel 的 public 文件夹。 但是正如您所说,您正在使用共享主机,那么 可能 对您来说是不可能的。
现在要在 url 中访问没有 public 的 laravel 应用程序,请遵循此问题
此外,您还担心无法从浏览器访问其他文件夹,例如 app、config 等。因此,您可以放置一个 .htaccess
在您要阻止从浏览器访问的每个文件夹中包含内容 Deny from all
的文件。
新建 根目录中的 .htaccess 文件 并粘贴以下代码
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/ [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
在根文件夹中制作 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/ [L]
</IfModule>
这是我找到的确切工作解决方案。解决方案取自
在根目录中创建 .htaccess 文件并放置如下代码。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^ [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>