我需要你的帮助。我已经在共享主机上部署了Laravel应用程序,并且我添加了htaccess文件以便将所有流量重定向到公共目录。目录结构如下:
public_html
|
-------my_website
|
-------.htaccess
我知道,我不应该这样做,正确的方法是将Laravel的公共目录内容放在public_html中,其余的Laravel应用程序应该在它之外,但在这种情况下,由于某些原因,我无法做到这一点(不代码相关)。现在我遇到了一个问题,因为任何人都可以通过点击直接网址来访问网站的敏感部分,例如:
http://mywebsite.com/my_website/database/database.sqlite
我没有关于htaccess的广泛知识,并花了很多时间搜索如何保护敏感文件,但我无法完成此任务。我的htaccess文件目前看起来像这样:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mywebsite.com$
RewriteCond %{REQUEST_URI} !^/mywebsite/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mywebsite/public/$1
RewriteCond %{HTTP_HOST} ^(www.)?mywebsite.com$
RewriteRule ^(/)?$ mywebsite/public/index.php [L]
RewriteRule ^/?$ "https\:\/\/www\.mywebsite\.com" [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule .* https://mywebsite.com%{REQUEST_URI} [R,L]
任何帮助,将不胜感激。
举个例子,因为你显示了一个sqlite文件的链接,请考虑这个:
RewriteRule ^mywebsite/database - [F,L]
这将使得对该sqlite文件的HTTP请求不被允许。您还可以添加其他目录,因此如果您还想保护目录foo,则:
RewriteRule ^mywebsite/(database|foo) - [F,L]
这是保护在Apache上运行的PHP应用程序目录的一种非常常见的技术
This repo on github,是一个关于如何在共享主机上部署laravel的好教程
在共享主机上与我合作,并从公用文件夹启动项目
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
<Files .env>
Order allow,deny
Deny from all
</Files>