RewriteRule在FilesMatch内部不起作用

时间:2019-03-26 14:40:15

标签: wordpress apache .htaccess

我正在尝试在加载文件时进行一些PHP验证,以确定是否可以向用户显示该文件。我需要使用PHP,因为我需要检查用户是否已登录。为此,我添加了

RewriteRule ^wp-content/uploads(/(custom_folder)/.*\.\w+)$ index.php?a_parameter=$1 [QSA,L]

到我的.htaccess。然后,每次用户尝试在/wp-content/uploads/custom_folder/中查看文件时,我都会检查a_parameter是否已定义并进行验证。

那很好,但是现在我只想对.htm.html文件进行此验证。为此,我尝试添加

<FilesMatch "\.(htm|html)$">
RewriteRule ^wp-content/uploads(/(custom_folder)/.*\.\w+)$ index.php?a_parameter=$1 [QSA,L]
</FilesMatch>

但是它不起作用。

要提供更多背景信息,我正在尝试在WordPress的.htaccess中进行此操作,因此这是完整的.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /_wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /_wp/index.php [L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /_wp/
RewriteRule ^index\.php$ - [L]

<FilesMatch "\.(htm|html)$">
RewriteRule ^wp-content/uploads(/(custom_folder)/.*\.\w+)$ index.php?a_parameter=$1 [QSA,L]
</FilesMatch>

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /_wp/index.php [L]
</IfModule>

# END WordPress

我在做什么错了?

谢谢!

1 个答案:

答案 0 :(得分:0)

我改变了态度。我没有使用FilesMatch,而是将正则表达式更改为以.htm.html和目录结尾的目标文件。鉴于我正在处理的项目的特征,我可以假定一个空目录将包含一个index.htmindex.html,因此这对我来说有效。如果是目录,那么我尝试在PHP中查找索引文件。

^wp-content/uploads/custom_folder/((?:.*\/)|.*\.(?:html|htm))$ index.php?relative_path=$1 [QSA,L]