2010-10-12 52 views
0

我的.htaccess文件是:幫助的mod_rewrite和mod_redirect

Redirect 301 http://domain.com/news/articles?dtMain_start=150 http://domain.com/news/articles 
Redirect 301 http://domain.com/news/articles?dtMain_start=160 http://domain.com/news/articles 
Redirect 301 http://domain.com/news/articles?dtMain_start=170 http://domain.com/news/articles 
# 
RewriteEngine On 
RewriteBase/

# The Friendly URLs part 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

我還必須包含以下規則

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^domain.com 
RewriteRule (.*) http://www.domain.co.uk/$1 [R=301,L] 

我不能讓他們一起工作......誰能幫助。 ..

我嘗試了堆疊的RewriteCond前的重定向和我得到這個... http://www.domain.com/news/articles?q=news/articles?dbMain_start=150
http://domain.com/newpage?q=oldpage

好的Mod_Alias和Mod_Rewrite不喜歡彼此。

我可以寫這樣的:

RewriteCond %{REQUEST_QUERY_STRING} ^.*&bodgeredirect=true$ 
RewriteRule ^(.*)&bodgeredirect=true$ index.php?q=$1 [L,QSA] 

回答

1

首先:There is not mod_redirect.Redirect是mod_alias中的指令。

Redirect指令一樣,只有mod_alias的其他指令才能使用URL路徑。所以你的Redirect指令將無法按預期工作。使用mod_rewrite等價物來代替:

RewriteCond %{HTTP_HOST} =example.com 
RewriteRule (.*) http://www.example.com/$1 [R=301,L] 

RewriteCond %{QUERY_STRING} ^dtMain_start=(150|160|170)$ 
RewriteRule ^news/articles$ /news/articles? [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

一般是不混合mod_alias中和mod_rewrite的,如果圖案彼此一致是個好主意。

+0

謝謝。我錯誤的誤解了Redirect的來源。我從SEO機構獲得了500多個以上格式的重定向。我意識到我的問題是有額外的空間和非法字符,而不是URL編碼。我可以在我的RewriteConds之前轉儲所有重定向嗎? – Simon 2010-10-13 09:56:37

+0

@Simon:既然提到的'Redirect'指令無論如何都不起作用,是的。 – Gumbo 2010-10-13 10:01:04

+0

@Simon:哦,同時也傾銷你的SEO機構。 ;) – Gumbo 2010-10-13 10:04:26