我怎样才能将多个前导斜杠(///file.txt)重定向到(/file.txt)?

时间:2012-08-02 15:50:19

标签: apache mod-rewrite configuration rewrite apache-config

我将我的apache conf设置为在.txt文件上显示php生成的文本,如下所示:

Alias /file.txt /var/www/domain.com/html/file.php

问题是这现在适用于任意数量的前导斜杠。例如,以下所有工作:

domain.com/file.txt
domain.com//file.txt
domain.com///file.txt

但是我希望所有多个斜杠重定向到根目录:

domain.com//file.txt =====[301]=====> domain.com/file.txt

这通常不会成为问题,除了这些多个斜杠网址中的一个实际上被编入索引!糟糕!

现在我需要301(永久)将所有多个斜杠重定向到根。 (所以//file.txt被重定向到/file.txt)

你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

当您在浏览器中输入http://domain.com////////file.txt时,重写引擎只会看到URI:/file.txt。但是,如果您在浏览器中输入http://domain.com///path////to/////file.txt,则重写引擎会将URI视为/path////to/////file.txt。额外的前导斜杠永远不会显示在%{REQUEST_URI}中,因此您唯一能做的就是匹配%{THE_REQUEST}变量:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /[/]+
RewriteRule ^ %{REQUEST_URI} [L,R=301]

这只会满足最终在浏览器地址栏上的额外前导斜杠,而不是最终在URI中的某个地方出现的杂散双斜线。要照顾这些,你需要做这样的事情:

RewriteCond %{REQUEST_URI} ^(.+)//(.+)$
RewriteRule ^ %1/%2 [L,R=301]