.htaccess Laravel托管在子目录中

kxkpmulp  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(136)

一个客户请求建立一个网站,现在它已经建立,他们已经请求它与他们现有的网站一起托管,但在一个子目录(example.com/example/path)。
我现在要处理的是找出正确托管它所需的apache规则。我已经将整个项目结构上传到该目录中。在public目录(/example/path/public)中,我有以下.htaccess文件(以下我将把它称为Laravel.htaccess):

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On
    RewriteBase /example/path

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Serve Cached Page If Available...
    RewriteCond %{REQUEST_URI} ^/?$
    RewriteCond %{DOCUMENT_ROOT}/page-cache/pc__index__pc.html -f
    RewriteRule .? page-cache/pc__index__pc.html [L]
    RewriteCond %{DOCUMENT_ROOT}/page-cache%{REQUEST_URI}.html -f
    RewriteRule . page-cache%{REQUEST_URI}.html [L]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

<FilesMatch ".(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot|otf)$">
    Header set Cache-Control "max-age=2628000, public"
</FilesMatch>
<FilesMatch ".(css|js)$">
    Header set Cache-Control "max-age=86400, public"
</FilesMatch>

我已经添加了RewriteBase行基于我试图找到一个解决方案,这一点。
在基本的.htaccess文件(/example/path/.htaccess)中,我有以下内容:

<IfModule mod_alias.c>
    Alias /example/path /home/www/<user>/html/example/path
    <Directory "/home/www/<user>/html/example/path">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</IfModule>

但是问题是这会返回一个内部服务器错误。我尝试过其他可能的解决方案,这些解决方案不使用Alias,而是返回40X错误。
我需要在用户访问example.com/example/path时能够让Laravel站点完全正常工作。在过去的90分钟里,我尝试了许多解决方案,但没有一个成功。
我的情况的 * 正确 * 解决方案是什么?

eufgjt7s

eufgjt7s1#

在公共文件夹中,我们托管了8个平台,每个平台的根目录都有.htaccess配置。希望这对您有所帮助。

<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>
tgabmvqs

tgabmvqs2#

我最近也这样做了。我的客户将他们的WordPress设置为解析为文档根目录(/var/www/html),但他们也希望他们的Laravel应用程序“安装”在WordPress的一个子文件夹中,并命名为“hq”
但是这将是一个安全问题,因为我们只想公开Laravel的公共文件夹,而不是应用程序文件。为了解决这个问题,我使用了符号链接的力量!
Laravel应用程序位于文档根目录下:

/var/www/laravel

然后,我使用命令“ln -s symlinkLocation symbolic-link-name”公开了DocumentRoot中Laravel的公共文件夹

ln -s /var/www/laravel/public /var/www/html/hq

在上面一行中,您可以看到“hq”不是实际的文件夹,而是指向/var/www/laravel/public的符号链接
(这是Laravel的index.php入口点所在的位置,css、js等)x1c 0d1x
符号链接如下所示:

我还制作了一个指向存储文件夹的符号链接:

ln -s /var/www/laravel/public/ /var/www/laravel/storage/app/public

它实现了“php artisan storage:link”所实现的功能。
作为参考,下面是我的laravel .htaccess的外观:
在/var/www/laravel/public/.htaccess中的.htaccess是

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

希望这对你有帮助

djmepvbi

djmepvbi3#

在项目根目录下创建htaccess文件

并添加以下行:

#disable directory browsing
Options -Indexes
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

#PROTECT ENV FILE
<Files .env>
order allow,deny
Deny from all
</Files>

#PROTECT htaccess FILE
<Files .htaccess>
order allow,deny
Deny from all
</Files>

相关问题