-->

我301怎么可以重定向多个领先的斜杠(///file.txt)只是(/file.txt)?(How

2019-10-17 02:38发布

我有我的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)

你能帮我吗?

Answer 1:

当您在浏览器中键入: 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)?