2012-09-28 30 views
2

我處於CMS創建重複項的情況。每頁都可以在最後和沒有打開的情況下以斜線打開。重寫規則不向用戶顯示斜線併爲腳本顯示斜線

所以我需要在物理上重寫每一個搜索引擎的URL以及301重定向的人,以便在最後沒有斜線時進行調整。

但問題是腳本停止工作,因爲它只能在URL的末尾使用斜槓。

我做了這個邏輯的.htaccess

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

但它越來越重定向循環。請你能幫我把它寫得正確。用戶和SE應該看到沒有結束URL的主要目的,但腳本需要在服務器內部用斜槓重寫URL。

回答

1

但它得到重定向循環。請你能幫我把它寫得正確。用戶和SE應該看到沒有結束URL的主要目的,但腳本需要在服務器內部用斜槓重寫URL。

你需要來匹配實際的請求,如果你要重定向,因爲否則,URI被改寫,你的第一條規則反對和重定向(又一次,又一次,又一次)相匹配。

因此,像這樣:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]*?)/($|\) 
RewriteRule ^(.*)(/) $1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*[^/])$ $1/ [L] 

(只有第一個條件被改變)

+0

完美的作品。你能幫我讀一下這是什麼意思([^ \] *?)/($ | \)?另外爲什麼我們在最後一個括號之前需要空格 – user1705856

+1

@ user1705856請求行可以如下所示:'GET/something'或'POST/smoething HTTP/1.1'。 '([^ \] *?)'是對任何非空格的非貪婪匹配(在HTTP/1.1之前停止),'/'必須匹配尾部的斜槓, ($ | \)'或者是行的末尾,或者是空格。 –