2013-06-18 42 views
-2

基於代碼在這裏找到:remove multiple trailing slashes mod_rewriteurl上的多個斜槓:如何刪除?

我有以下的htaccess

Options +FollowSymLinks 
DirectorySlash Off 
RewriteEngine on 
RewriteOptions inherit 
RewriteBase/

# 
# remove multiple slashes from url 
# 
RewriteCond %{HTTP_HOST} !="" 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR] 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$ 
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L] 

# 
# Remove multiple slashes anywhere in URL 
# 
RewriteCond %{THE_REQUEST} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

然而,我發現了G-機器人已經抓取了這個網址:http://www.example.com/aaa/bbb/////////bbb-ccc/bbb-ddd.htm。 (aaa,bbb,ccc,ddd,是url中的關鍵字,不會被採取litraly - 我jut顯示url的模式)

在活服務器上測試上述url我發現斜槓刪除沒有工作。

任何人都可以提供任何提示或改進現有的代碼?謝謝

編輯1
@Sylwester提供了以下代碼

# if match set environment variable and start over 
RewriteRule ^(.*?)//+(.*)$ $1/$2 [E=REDIR:1,N] 

# if done at least one. redirect with 301 
RewriteCond %{ENV:REDIR} 1 
RewriteRule ^/(.*) /$1 [R=301,L] 

它也不工作。我仍然在URL中看到//////。
我已經把這套規則放在我的htaccess文件的最頂端,就在「RewriteBase /」下面,以免受到其他規則的影響,但是......什麼都沒有。
還有其他建議嗎?

+2

那麼爲什麼在其他問題的答案不適合你? – JJJ

+0

@Juhana我不知道 – andrew

+0

我設法在您提供的鏈接中找到答案。我敢打賭你也可以。 – Sylwester

回答

3

每個目錄和.htaccess是棘手的,因爲Apache實際上已經刪除了冗餘削減我們。例如。沒有匹配// +了,所以我們選中%{REQUEST_URI},因爲它有原始的URI,而重寫規則需要匹配任何東西:

# NB: Only works for per directory and .htaccess 
# Needs "AllowOverride All" in global config for .htaccess 
RewriteEngine On 
RewriteBase "/" 

Options +FollowSymlinks 
# Check if the REQUEST_URI has redundant slashes 
# and redirect to self if it has (which apache has cleaned up already) 
RewriteCond %{REQUEST_URI} //+ 
RewriteRule ^(.*) $1 [R=301,L] 

如果你可以添加全局配置,我會者優先此在虛擬主機,而不是:

RewriteEngine On 
# if match set environment variable and start over 
RewriteRule ^(.*?)//+(.*)$ $1/$2 [E=REDIR:1,N] 

# if done at least one. redirect with 301 
RewriteCond %{ENV:REDIR} 1 
RewriteRule ^/(.*) /$1 [R=301,L] 
+0

我測試了你的代碼並注意到了。在原始文章中查看我的edit1部分。 – andrew

+0

我已經更新了我的答案。它現在應該工作。 – Sylwester

+0

是的,現在它按預期工作。謝謝。 – andrew