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

时间:2015-09-18 14:19:39

标签: apache rewrite

我有一个名称相同的文件存在于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不包含“固件”,则重写。

<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>

似乎没有循环

1 个答案:

答案 0 :(得分:0)

根据我的编辑2:,我认为我的工作正常。

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

<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>

经过相当多的测试后,似乎没有循环