AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1157058
Accepted
klewis
klewis
Asked: 2024-03-29 00:59:20 +0800 CST2024-03-29 00:59:20 +0800 CST 2024-03-29 00:59:20 +0800 CST

如何使用 htaccess 匹配文件名的开头

  • 772

我正在尝试修改.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
  • 1 1 个回答
  • 180 Views

1 个回答

  • Voted
  1. Best Answer
    MrWhite
    2024-03-29T01:44:36+08:002024-03-29T01:44:36+08:00

    您还没有说明.htaccess您要保护的文件所在的“特定目录”?(尽管如果我们重新制定规则,这应该不重要。)

    RewriteCond %{REQUEST_URI} ^cat_([0-9a-zA-Z_]+)\.(pdf|doc|jpg|webp) [NC]
    RewriteRule . /index.php [R=302,L]
    

    服务器REQUEST_URI变量包含完整的 URL 路径(包括斜杠前缀),因此通常需要包含“特定目录”,而不仅仅是文件名(除非您调整正则表达式)。您在正则表达式上有一个字符串开头锚点(尽管您省略了字符串结尾锚点),因此此条件(RewriteCond指令)永远不会匹配。

    您的正则表达式也将无法匹配您的第三个和第四个示例,因为您的正则表达式字符类 ( ) 省略了这些文件名中存在的特殊[0-9a-zA-Z_]字符$, 。虽然我猜想你不需要那么具体,捕捉(例如)就可以了。&-cat_<anything>.pdf

    但是,这里不需要单独的条件。仅使用模式更简单、更高效RewriteRule ,它相对于包含文件的目录进行匹配.htaccess(并且不包括斜杠前缀),因此您无需担心 URL 路径的其余部分。

    我还怀疑您是否应该重定向到/index.php. 这不应该是简单的/(根目录)并允许目录索引(即index.php)由 mod_dir 提供服务吗?这不是你的规范 URL 吗?

    .htaccess请在您要保护的目录中的文件中尝试以下操作。

    RewriteRule ^cat_[^/]+\.(pdf|doc|jpg|webp)$ / [R=302,L]
    

    这个正则表达式可能比它需要的更广泛,但这也使它更简单。IE。[^/]匹配任何不是/(路径分隔符)的内容。

    并且不需要<IfModule>包装器,除非该规则完全是可选的。


    然而,我不会重定向到主页(这会让用户感到困惑,对机器人来说也不必要),而是简单地阻止(使用 403 Forbidden)此类请求。例如:

    <FilesMatch "^cat_[^/]+\.(pdf|doc|jpg|webp)$">
        Require all denied
    </FilesMatch>
    
    • 4

相关问题

  • apache重写以将文件夹分配给域

  • Apache conf 或 .htaccess 规则将 404 重定向到特定文件类型的另一个位置

  • 如何让 Apache2 重定向到子目录

  • .htaccess - 删除所有 cookie

  • 我的 .htaccess 文件是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve