去除URL中的public的4种最佳方法。
如果您使用了其他技巧来删除URL中的public,例如将server.php的名称更改为index.php并更改为核心文件路径。请明确不要这样做。那么为什么Laravel不像这样提供解决方案,因为这不是一个适当的方法。
1)使用htaccess在Laravel中删除URL中的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 ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</ifmodule>
2) 通过在本地创建虚拟主机来删除公共
我这里演示的是 Windows 操作系统,但我将尝试定义一些步骤,以便任何人都可以轻松跟随。您也可以在谷歌上为特定的操作系统进行研究。
步骤1:转到 C:\Windows\system32\drivers\etc\,以管理员模式打开 "hosts" 文件。
步骤2:添加以下代码。在此,我为 projectname.local 域名提供演示,您可以随意指定任何域名,只需在每个位置都使用相同的名称即可。
127.0.0.1 projectname.local
步骤3:现在,对于xampp用户,请前往C:\xampp\apache\conf\extra
,对于wamp用户,请前往"C:\wamp\bin\apache\Apache2.4.4\conf\extra"
并打开"httpd-vhosts.conf"
文件。现在在其中添加以下代码。
注:根据您的项目更改文档根目录,也将域名添加到“hosts”文件中定义。
<VirtualHost projectname.local>
ServerAdmin projectname.local
DocumentRoot "C:/xampp/htdocs/projectdir"
ServerName projectname.local
ErrorLog "logs/projectname.local.log"
CustomLog "logs/projectname.local.log" common
</VirtualHost>
步骤4:最后一个也是非常重要的一步,就是重新启动你的Xampp或Wamp,并通过http://projectname.local
这个链接访问你的Laravel网站,这样就不需要加public URL了。
3)使用Laravel命令去掉public
如果您在本地工作,则无需做任何操作,只需从终端或命令行工具中运行以下命令即可。之后,您可以使用命令行提供的URL访问您的网站。
> php artisan serve
如果您想在特定IP上运行项目,则需要运行以下命令。如果您正在本地局域网上工作,并且想要允许其他人从本地访问您的网站,则只需通过命令行运行“ipconfig”来检查您的IP地址,然后运行以下命令。
> php artisan serve --host=192.168.0.177
如果你想在特定的IP地址和端口上运行你的项目,那么你需要执行以下命令。
> php artisan serve --host=192.168.0.177 --port=77
4) 在托管服务器或cPanel上删除public文件夹
![enter image description here](https://istack.dev59.com/RCr8O.webp)
完成项目后,您需要将其托管在服务器上,然后只需将文档根目录设置为public文件夹。请参考下面的屏幕截图。
如果您在public_html中没有任何项目文件夹,则只需像"public_html/public"
一样设置文档根目录。
参考此处
public
文件夹存在于文档根目录下,只用作公开访问,不应有其他文件存放其中。否则会导致私有存储、env文件和其他敏感文件面临安全风险。为了保证安全,请**更改您的文档根目录!**在本地环境之外没有任何合法原因不这么做,这就像是在数据库中不加密密码一样。 - Tofandel