2011-07-20 64 views
0

這是我目前的.htaccess文件htaccess的使用正則表達式

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ 


RewriteRule ^([^/]+)/$ index.php?p1=$1 [L] 
RewriteRule ^([^/]+)/([^/]+)/$ index.php?p1=$1&p2=$2 [L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ index.php?p1=$1&p2=$2&p3=$3 [L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4 [L] 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [L] 

基本上,它需要長達五「友好的URL文件夾」和值賦給變量下,然後301重定向,把那些我的索引。 php頁面

IE: http://www.example.com/ford/focus/grey/ 

$p1 = 'ford'; 
$p2 = 'focus'; 
$p3 = 'grey'; 
$p3 = 'grey'; 

到目前爲止,這麼好。

現在,我需要一個301指令(?正則表達式)在同一的.htaccess因爲最初整合,我有這樣的GET參數:

IE: http://www.example.com/ford/focus/grey/?lang=fr 

我需要擺脫所有的GET變量,因爲谷歌認爲這是重複的內容(即使我用我的語言鏈接nofollow屬性)

IE: http://i.want.to.keep/my/url/?AND_DUMP_GET_VARIABLES 

http://www.example.com/ford/focus/grey/?lang=fr 
http://www.example.com/ford/focus/grey/?lang=en 
http://www.example.com/ford/focus/grey/?lang=sp 
==> http://www.example.com/ford/focus/grey/ 

從邏輯上講,應該說明的第一和第二塊,但我只是不知道從哪裏之間進行解釋開始。任何提示?

謝謝!

回答

0

據我所知,你想擺脫QUERY STRING和重定向(301永久重定向)到相同的URL,但沒有QUERY STRING。

規則下面將重定向具有查詢字符串的每個請求:

RewriteCond %{QUERY_STRING} !^$ 
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L] 

1. ?會做的魔力 - 會去掉查詢字符串

2.你迫切需要這一行:RewriteCond %{ENV:REDIRECT_STATUS} ^$ 。問題是,可能無法在你的Apache設置上工作,我不能給你你需要什麼使它工作(它在我的香草Apache v2.2.17在Windows上正常工作)。

重寫(內部重定向)發生後,它進入下一次迭代,Apache開始再次匹配頂部的所有規則,但是已經重寫了URL。如果我們不添加上面的行,那麼mod_rewrite會將上述規則應用於重寫的URL表單,並且您將最終以全部網址被重寫爲/index.php,根本沒有參數。

如果以上都不行,那就試試下面的代碼:

# do not do anything for already existing files and folders 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 

RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L] 

隨着# do not do anything for already existing files and folders規則的幫助下,mod_rewrite的將停止重寫URL後,將改寫爲/index.php?p1=...格式。

如果以上都行不通(更好 - 除了上面 - 我建議增加這無論如何)在你的頁面中使用<link rel="canonical" href="FULL_PROPER_RUL"/>

+0

你好,我現在有點急於別的東西。只要我有時間,我會測試你的解決方案。謝謝! – Jivago

+0

我可能沒有良好的服務器設置爲您的解決方案工作。至少,我會採取你的解決方案的每個部分,並嘗試搜索它,我很確定我會找到一些東西。再次感謝! – Jivago

+0

@Jivago什麼不適合你?其他規則是否有效(我的意思是 - 是否啓用了mod_rewrite)? – LazyOne