Apache 将 1 个文件全局重写为新文件 URL

Apache rewrite 1 file globally to new file URL

我有一个同名文件存在于 15 个子目录中。假设它叫做 blah.txt

我希望在 httpd.conf 中进行全局重写以匹配任何子目录的 blah.txt 并将其重写为单数 http://myserver/blah.txt.

如果我将以下内容添加到 .htaccess,效果会很好。我点击了子目录的 txt 文件,我被 301 转发了。然而,这样做意味着我需要管理 15 个 .htaccess。我正在努力避免这种情况。

RewriteEngine On
RewriteRule ^(blah)\.txt http://myserver/blah.txt [L,R=301]

如果我将相同的文本放入 <Directory /> 部分下的 httpd.conf,我会在子目录的 blah.txt 上得到 404。

<Directory />
    Options All Indexes FollowSymLinks
    AllowOverride All
    Allow from all

    RewriteEngine On
    RewriteRule ^(blah)\.txt http://myserver/blah.txt [L,R=301]


</Directory>

如何在 httpd.conf 内进行全局匹配?

编辑: 如果我将 httpd.conf 重写更改为下面的内容,似乎 想要 工作,但是我陷入了无限循环,因为它不断匹配相同的文件名。

    RewriteEngine On
    RewriteRule blah.txt http://myserver/blah.txt [L,R=301]

仍在寻找一种方法使其在子目录中匹配并重定向到相同的文件名。

编辑 2: 我想我成功了 - 但希望得到确认!

我在规则中添加了 RewriteCond。基本上,我认为,这意味着如果 URI 不包含 "firmware",则重写

<Directory />
    Options All Indexes FollowSymLinks
    AllowOverride All
    Allow from all

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !(firmware) [NC]
    RewriteRule blah.txt firmware/series/version/blah.txt [R=301,L]

</Directory>

它似乎在没有循环的情况下工作

根据我的 编辑 2: 我想我成功了。

我在规则中添加了 RewriteCond。基本上,我认为,这意味着如果 URI 不包含 "firmware",则重写

<Directory />
    Options All Indexes FollowSymLinks
    AllowOverride All
    Allow from all

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !(firmware) [NC]
    RewriteRule blah.txt firmware/series/version/blah.txt [R=301,L]

</Directory>

经过相当多的测试,它似乎在没有循环的情况下工作