当访问主域“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”加载“子文件夹”中的文件,而我仍然可以访问其他文件夹中的文件?
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f
除非您需要访问目录本身(这是不寻常的),否则只需删除第一个检查它不是目录的条件(根目录是目录)。您仍然可以访问其他文件。
否则,创建另一个仅重写根的规则:
RewriteRule ^$ subfolder/ [L]
请注意,为了重写为文件路径(而不是 URL 路径),替换 字符串上不需要斜杠前缀。
RewriteCond %{REQUEST_URI} !subfolder/
您确实应该锚定这个正则表达式,以便它“匹配”URL路径开头的
/subfolder/
,而不是URL路径中任何地方的subfolder/
。例如:
RewriteCond %{REQUEST_URI} !^/subfolder/