mod_rewrite:仅删除特定文件的尾部斜杠

时间:2017-07-25 20:17:17

标签: apache mod-rewrite

我正在尝试从仅以某个文件扩展名.txt结尾的网址中删除尾部斜杠。

这是完整的.htaccess文件:

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} (.*)\.txt.html
RewriteRule ^(.)\.txt.html /$1.txt [R=301,L]

RewriteCond %{THE_REQUEST} (.)\.txt
RewriteRule ^(.)\.txt $1.txt.html [L]

RewriteCond %{THE_REQUEST} (.)\.txt/
RewriteRule ^(.*)\.txt\/ $1.txt [R=301]

除了.txt/的规则为网址添加完整路径外,一切都很好。是否可以使它与相对路径一起工作?

例如,此网址

http://test.local:8080/doc/Cons/Bo/Dwnlds/Test.txt/

转到此

http://test.local:8080/Users/dev1/Documents/96/test.org/doc/Cons/Bo/Dwnlds/Test.txt

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您需要向目标添加一个前导斜杠,因为(.*)将不包含它,因此结果是奇怪的文件系统路径:

RewriteRule ^(.*)\.txt\/ /$1.txt [R=301]

实际上是因为RewriteRules默认为文件系统路径(如果存在)(在您的情况下,很难判断您的目标是URL路径还是文件系统路径,因为没有基本文件夹)。请参阅http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

上的相关文档