提问人:Gavo 提问时间:9/8/2023 最后编辑:Gavo 更新时间:9/11/2023 访问量:104
如何将共享主机根重写到公用文件夹并将/public重定向回根目录?
How to rewrite shared hosting root to the public folder and redirect /public back to the root?
问:
我有一个 Laravel 项目,它已从自定义 VPS 转移到共享主机。
从root到公众重写所有内容是容易的部分。
但是当我转到 domain.com/public 页面时,可以工作......
那么我如何将域根重写为公众,但将直接访问 domain.com/public 重定向回 domain.com/?
免責聲明: 有很多关于 Laravel 的线程,并重写到公共文件夹。但没有人按预期工作。
答:
0赞
user83129
9/9/2023
#1
由于大多数共享主机不允许您更改主域的目录,因此这是一个常见问题。使用 Laravel 时,必须将域指向公用文件夹。
虽然有可能,但请注意,使用此解决方案,如果应用程序要更新,您将遇到安全问题,正如@Tpojka所指出的那样,您可能会面临泄露机密的风险,例如从您的 .env 文件中泄露机密。
此答案中描述的更好的解决方案是将 Laravel 应用程序目录移动到其他地方,然后复制或符号链接公共/文件夹内容。这样,应用程序的实际文件就无法公开访问。您需要确保是否需要符号链接存储/将其移动到正确的文档根目录。
0赞
Gavo
9/10/2023
#2
我找到了解决方案,所以我想与他人分享。
这必须位于根目录中。 公共目录 .htaccess 文件必须是 emtpy。
像其他人在这里评论一样。设置完成后,您需要检查您的敏感文件(如.env)是否不可见。
尝试 domain.com/.env,如果您没有获得 .env 文件,那就好了。
<IfModule mod_rewrite.c>
# That was ONLY to protect you from 500 errors
# if your server did not have mod_rewrite enabled
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Prevent direct access to the "public" folder - redirect to root
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /public/
RewriteRule ^public/(.*) /$1 [R=302,L]
#RewriteRule ^public/(.*)$ /$1 [R=302,L]
# Redirect Trailing Slashes If Not A Folder...
# - but look for the file in the "public" folder
# (ensure we are not already in the "public" folder)
RewriteCond %{REQUEST_URI} !^/public/
RewriteCond %{DOCUMENT_ROOT}/public/$1 !-d
RewriteRule ^(.*)/$ /$1 [R=302,L]
# Rewrite "everything" to the "public" subdirectory if not already
# This ignores existing files/dirs in the document root
RewriteCond %{REQUEST_URI} ^/(.*)
RewriteRule !^public/ public/%1
# Handle Front Controller... (as before)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
评论
https://www.example.com/.env