.htaccess 如何将共享主机的根目录重写为public文件夹并将/public重定向回根目录?

clj7thdc  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(141)

我有一个Laravel项目,从自定义VPS迁移到共享主机。
重写所有从根到公众是容易的一部分。
但是当我去domain.com/public页面工作.
那么,我如何重写域根到公众,但重定向直接访问domain.com/public回到domain.com/?
免责声明:有很多关于Laravel和重写到公共文件夹的线程。但没有人按预期工作。

mcvgt66p

mcvgt66p1#

由于大多数共享主机不允许您更改主域的目录,这是一个常见的问题。使用Laravel,您必须将域指向公共文件夹。
虽然这是可能的,但请注意,使用此解决方案,如果应用程序需要更新,您将面临安全问题的打击,正如@Tpojka所指出的那样,您可能会面临泄露机密的风险,例如从您的.env文件中泄露机密。
一个更好的解决方案是将Laravel应用程序目录移动到其他地方,并复制或符号链接public/文件夹内容。这样应用程序的实际文件就不会被公开访问。您需要确保如果您需要符号链接storage/,您也会将其移动到正确的文档根目录。

e4yzc0pl

e4yzc0pl2#

我找到了解决方案,所以我想和别人分享。
这必须在根目录。公共目录。htaccess文件必须是空的。
像其他评论在这里。安装后,您需要检查您的敏感文件,如.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>

相关问题