我正在尝试修改.htaccess
特定目录中的文件。如果网络用户尝试在此目录中查找任何可能像以下选项那样命名的文件,我希望它们被重定向回主页。以下是一些文件名示例。
/cat_1234.pdf
/cat_blahbla.doc
/cat_$9989&428.jpg
/cat_-309bn-020n.webp
...我怎样才能告诉我RewriteCond
留意这些模式?这是我最好的尝试,我认为它会起作用,但事实并非如此......
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^cat_([0-9a-zA-Z_]+)\.(pdf|doc|jpg|webp) [NC]
RewriteRule . /index.php [R=302,L]
</IfModule>
我缺少什么?
您还没有说明
.htaccess
您要保护的文件所在的“特定目录”?(尽管如果我们重新制定规则,这应该不重要。)服务器
REQUEST_URI
变量包含完整的 URL 路径(包括斜杠前缀),因此通常需要包含“特定目录”,而不仅仅是文件名(除非您调整正则表达式)。您在正则表达式上有一个字符串开头锚点(尽管您省略了字符串结尾锚点),因此此条件(RewriteCond
指令)永远不会匹配。您的正则表达式也将无法匹配您的第三个和第四个示例,因为您的正则表达式字符类 ( ) 省略了这些文件名中存在的特殊
[0-9a-zA-Z_]
字符$
, 。虽然我猜想你不需要那么具体,捕捉(例如)就可以了。&
-
cat_<anything>.pdf
但是,这里不需要单独的条件。仅使用模式更简单、更高效
RewriteRule
,它相对于包含文件的目录进行匹配.htaccess
(并且不包括斜杠前缀),因此您无需担心 URL 路径的其余部分。我还怀疑您是否应该重定向到
/index.php
. 这不应该是简单的/
(根目录)并允许目录索引(即index.php
)由 mod_dir 提供服务吗?这不是你的规范 URL 吗?.htaccess
请在您要保护的目录中的文件中尝试以下操作。这个正则表达式可能比它需要的更广泛,但这也使它更简单。IE。
[^/]
匹配任何不是/
(路径分隔符)的内容。并且不需要
<IfModule>
包装器,除非该规则完全是可选的。然而,我不会重定向到主页(这会让用户感到困惑,对机器人来说也不必要),而是简单地阻止(使用 403 Forbidden)此类请求。例如: