.htaccess 将主域重定向到子目录无法访问文件问题

问题描述 投票:0回答:1

当访问主域“example.com”时,它应该从子文件夹加载文件,因为我无法编辑主域根文档。

结构:

public_html
    subfolder
        index.php
    anotherfolder
        image.png
    .htaccess

.htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !subfolder/
RewriteRule (.*) /subfolder/$1 [L]

代码检查请求的 URL 是否不是文件或目录并且不包含

subfolder
,它会重定向到
subfolder

使用此代码,我可以访问其他文件夹中的文件,例如“example.com/anotherfolder/image.png”,但是当我尝试访问“example.com”时,我收到 403 禁止。

我尝试删除这两行来检查它不是目录或文件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

我可以访问“example.com”,但是当我尝试访问另一个文件夹中的图像时,出现 404 not found。

如何解决这个问题,以便“example.com”加载“子文件夹”中的文件,而我仍然可以访问其他文件夹中的文件?

apache .htaccess
1个回答
0
投票
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

除非您需要访问目录本身(这是不寻常的),否则只需删除第一个检查它不是目录的条件(根目录是目录)。您仍然可以访问其他文件。

否则,创建另一个仅重写根的规则:

RewriteRule ^$ subfolder/ [L]

请注意,为了重写为文件路径(而不是 URL 路径),替换 字符串上不需要斜杠前缀。


RewriteCond %{REQUEST_URI} !subfolder/

您确实应该锚定这个正则表达式,以便它“匹配”URL路径开头的

/subfolder/
,而不是URL路径中任何地方的
subfolder/
。例如:

RewriteCond %{REQUEST_URI} !^/subfolder/
© www.soinside.com 2019 - 2024. All rights reserved.