编辑 .htaccess 文件以使文件可访问

编辑 .htaccess 文件以使文件可访问

我试图让 WordPress 插件正常工作,但经过几个小时的调试、试验、错误和祈祷古希腊诸神之后,我发现该插件无法正常工作,因为服务器无法访问特定文件。

该网站托管在基本的共享主机环境中,因此唯一可以配置的是一个.htaccess文件。这个文件中充满了规则,但我最终找到了导致插件出现问题的规则:

RewriteRule ^wp-content/(?!themes/.*/core/css/custom\.css\.php$)(.*)\.php$ [R=404,L]

当我注释掉这条规则时,插件开始正常工作。

现在,我并不是服务器或.htaccess专家,但编写此规则的人考虑到了一些安全问题,所以我想改变它,以便它只允许我的文件工作。

我的文件的路径是:

wp-content/plugins/plugin-name/public/js/service-worker-loader.js.php

你能帮助我吗?

答案1

RewriteRule ^wp-content/(?!themes/.*/core/css/custom\.css\.php$)(.*)\.php$ [R=404,L]

在旁边:按照书面说明,此规则/指令不正确。它“缺少”第二个参数。(第三个/flags 参数将被视为第二个参数,并导致与此模式匹配的请求被错误地重写为文字“URL” [R=404,L]- 这显然不是有效的 URL,并且很可能会以非常迂回的方式导致 404... 由 WordPress 而不是 Apache 造成。)

我希望上述规则有一个连字符(即-)作为第二个参数。例如:

RewriteRule ^wp-content/(?!themes/.*/core/css/custom\.css\.php$)(.*)\.php$ - [R=404]

L这里不需要标志。

(对于普通读者来说,这可能看起来很微妙,但这是一个明显的错误/打字错误。)

但是,您不需要修改该规则来解决您的问题。(在不了解详细信息的情况下,我会避免编辑此规则,以防它是 WP 插件而不是“人”编写的。尽管它目前编写的“错误”仍然存在。)相反,您只需在文件的最顶部添加一条附加规则.htaccess即可例外针对相关文件。例如:

# Prevent further processing when file is requested
RewriteRule ^wp-content/plugins/plugin-name/public/js/service-worker-loader\.js\.php$ - [END]

假设 Apache 为 2.4。(如果您使用的是 Apache 2.2,则使用 标志L而不是END。)

.htaccess此规则可防止在请求该文件时处理文件其余部分中的任何其他 mod_rewrite 指令。


更新:

是否可以将规则放在我们试图授予访问权限的文件的同一目录中的另一个 htaccess 中?或者更高的 htaccess 优先?

是的,你可以这样做。.htaccess在子目录中创建另一个,然后禁用重写引擎。例如:

# /subdirectory/.htaccess
RewriteEngine Off

由于默认情况下 mod_rewrite 指令不会被继承,因此这实际上会覆盖父级(目录)配置中的 mod_rewrite 指令。父级中的 mod_rewrite 指令不会被处理,因此请求不会被阻止。

(每个 Apache 模块的处理方式不同。来自其他模块的指令,例如 mod_expires,仍将在父/根配置中处理。)

相关内容