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>
经过相当多的测试,它似乎在没有循环的情况下工作
我有一个同名文件存在于 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>
经过相当多的测试,它似乎在没有循环的情况下工作