1

我将我的 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

这通常不会成为问题,除非这些多个斜杠 URL 之一实际上已编入索引!哎呀。

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

你能帮我吗?

4

1 回答 1

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]
于 2012-08-02T19:45:39.940 回答