Laravel 7.x - 如何从 URL 中删除“公共”?

Posted

技术标签:

【中文标题】Laravel 7.x - 如何从 URL 中删除“公共”?【英文标题】:Laravel 7.x - How to remove 'public' from URL? 【发布时间】:2020-08-31 11:56:53 【问题描述】:

坚持了很长时间。我发现了类似的问题,但没有一个答案对我有用! 根文件夹中的 .htaccess 如下所示:

RewriteEngine On 
RewriteCond %REQUEST_URI !^/public/ 
RewriteRule ^(.*)$ /public/$1 [L,QSA]

【问题讨论】:

为什么不'[你使用默认的 Laravel htaccess 文件?github.com/laravel/laravel/blob/master/public/.htaccess @KarlHill 我尝试了默认文件,但仍然无法正常工作!我是否也必须更改公用文件夹中的 htaccess 文件? 【参考方案1】:

在根目录下创建一个名为“.htaccess”的文件并添加以下代码。就是这样

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

【讨论】:

它在 laravel 8.x 版本中工作。谢谢。 它使用 Laravel 8 工作 :) 谢谢!【参考方案2】:

示例here 位于/public 目录中。您还需要正确配置您的服务器,并让它只查看 /public 目录而不是根目录。您不需要根目录中的 .htaccess 文件。

您将需要一个 httpd-vhosts.conf,内容如下:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName yourapp.com
    ServiceAlias www.yourapp.com
    DocumentRoot /var/www/yourapp/public
</VirtualHost>

注意这一行:

DocumentRoot /var/www/yourapp/public

您可以阅读有关 Laravel 网络服务器配置的更多信息here.

【讨论】:

【参考方案3】:

在你的主 .htaccess 里面应该是这样的:

<IfModule mod_rewrite.c>
   RewriteEngine on     
   RewriteCond %REQUEST_URI !^public
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

如果存在类似的内容,请替换现有的“ RewriteRule ^(.*)$ public/$1 [L] ”。

【讨论】:

以上是关于Laravel 7.x - 如何从 URL 中删除“公共”?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 laravel 5 中的 url 中删除 public/index.php?

如何以正确的方式从 laravel 5 url 重写或删除 public?

如何将 laravel 版本从 8.x 降级到 7.x?

通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值

通过删除Laravel中的额外字符,从斜杠分隔的URL中提取参数值

Laravel 6:使用 htaccess 从 URL 中删除 Public