2012-08-02 65 views
1

我有我的Apache的conf设置为显示在.txt文件的PHP生成的文本,像这样:我该如何将多个斜杠(///file.txt)重定向到(/file.txt)?

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

'^重写规则/ {2} $ file.txt文件/file.txt [R = 301]'或东西沿着这些路线,我现在没有时间进行验证(这就是为什么我不会将它作为答案发布),但这应该会使您朝正确的方向发展。 – zneak 2012-08-02 15:52:44

+0

谢谢zneak,但那也行不通。 – Ryan 2012-08-02 16:55:37

回答

2

当您在浏览器中输入: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] 
+0

可爱!有用!谢谢。 – Ryan 2012-08-02 21:41:44