2011-07-15 108 views
2

我在我的網站上有兩種鏈接:第一種是用.html結束,第二種是用/(用斜槓結束,在文件名未完成的情況下的.html)。RewriteRule of .htaccess,斜線在末尾

一些重寫規則的原因,在文件不是.html的情況下,如果被添加/在最後,URL沒有被正確地重寫。

像:

這是確定與鏈接:http://mysite.com/cars/fast-cars

但不能與鏈接OK:http://mysite.com/cars/fast-cars/

所以,當URL與/,而不是用(.html/)完成我需要的是,在沒有/的情況下,或在這種情況下:

http://mysite.com/cars/fast-cars/將被重定向到http://mysite.com/cars/fast-cars

希望我很清楚,並且您可以通過該htaccess規則來幫助我。先謝謝你。

更新:我在這裏發現了部分解決方案:.htaccess with or without slash

但是,我的規則也不應該是有效的一些子目錄(如目錄管理員,訂單等)。它也可以用相同的規則來定義嗎?

更新2:我有這樣的規則:

RewriteRule ^cars/fast-cars$ /seopage.php?marker=fast-cars$1 

此外,tryed與工作規則:

RewriteRule (.*)/$ $1 [L,R=301] 

但該規則必須繞過一些目錄(即管理員,訂單等)。

+0

請顯示您現在的規則(包括您最近添加的規則)。最好有評論。 – LazyOne

+0

作爲更新2添加... – user198003

+0

什麼文件夾(名字少)?他們是真的嗎?還是他們是「虛擬」的?/汽車/快車?添加這樣的條件應該沒有問題,我只是想爲自己說清楚。 – LazyOne

回答

5

你可以通過幾種方法來做到這一點(選擇最適合你的方法)。

1)刪除斜線/爲不存在的文件和文件夾:

# remove trailing slash for non-existing files and folders 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ $1 [L,R=301] 

2)刪除斜線/有例外

# remove trailing slash except some folders 
RewriteCond %{REQUEST_URI} !^/(admin|orders) 
RewriteRule ^(.*)/$ $1 [L,R=301] 

3)你甚至可以一起結合起來(這可能太多):

RewriteCond %{REQUEST_URI} !^/(admin|orders) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ $1 [L,R=301] 

另外,考慮在頂部的某處添加此指令 - documentation

DirectorySlash Off 
+0

我認爲2會完成這項工作。它是否適用於上述目錄的子目錄? – user198003

+1

是的,條件說:除非/除了URL **開始**以'/ admin'或'/ orders'「,這也適用於'/ admin/dashboard /'等。 – LazyOne