我有我的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)
你能帮我吗?
当您在浏览器中键入: 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]
文章来源: How can I 301 redirect multiple leading slashes (///file.txt) to just (/file.txt)?