我将我的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)
你能帮忙吗?
答案 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]