.htaccess 403错误提示403错误提示

nnsrf1az  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(187)
  • 带有DSM 7.1.x的Synology服务器(最近从DSM 6.x更新,Synology不建议降级回DSM 6.x)
  • 已启用Web工作站,具有HTTP后端服务器:Apache HTTP服务器2.4和PHP:PHP 8.0语言
  • 具有这些设置的个人网站HTTP后端服务器:Apache HTTP服务器2.4和PHP:PHP 7.4语言
  • 个人网站使用需要.htaccess文件的WordPress 5.x或6.x
    问题:/homes/user/www文件夹中的个人网站.htaccess导致403错误

可以删除.htaccess以停止403错误,但个人网站使用WordPress,这需要.htaccess -不能只是删除此文件,因为一些WordPress操作重新创建.htaccess文件(如更改设置〉永久链接)新创建的测试用户案例:临时

  • homes/tmp/www文件夹中的“users”组具有775个权限
  • homes/tmp/www/.htaccess拥有“用户名”所有者和具有770个权限的“用户”组
  • homes/tmp/www/wp-config.php拥有“用户名”的所有者和“用户”组,拥有770个权限
  • 即使对homes/tmp/www中的所有文件使用777权限,.htaccess仍然存在403错误
  • 删除.htaccess并创建/发布新页面后,查看新页面会导致404错误。

默认.htaccess行

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /~username/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /~username/index.php [L]
</IfModule>

即使.htaccess没有任何代码行,403错误也是存在的。因此,不管.htaccess文件的内容如何,只要它存在就会导致403错误。
有人有办法解决这个问题吗?

zc0qhyus

zc0qhyus1#

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /~username/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /~username/index.php [L]
</IfModule>

看起来您使用的是Apache per-user web directories?如果是这样,那么/~username不是一个物理目录(它是您的用户目录的“别名”),您的文档根目录实际上是/~username/(这实际上会与根目录相对的URL路径混淆)。
在这种情况下,您的.htaccess应该如下所示:

RewriteEngine On

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

请注意,我已经完全删除了RewriteBase指令。
然而,如果这是WordPress代码块的一部分(即# BEGIN WordPress ... # END WordPress内)注解标记,那么WordPress将尝试覆盖您的更改,除非您采取额外的步骤来防止这种情况。

57hvy0tb

57hvy0tb2#

解偶偶然发现:
编辑Apache2.x的httpd2x.conf(无论为个人网站选择哪一个)
添加以下代码

UserDir www
<Directory "var/services/homes/*/www">
    Options FollowSymLinks
    AllowOverride All
</Directory>

我尝试了一堆东西,我认为以上是诀窍。

相关问题