我有一个名称相同的文件存在于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>
似乎没有循环
答案 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>
经过相当多的测试后,似乎没有循环