2013-06-01 118 views
0

從最近3小時起,我試着使用這個301 url重定向,但它不能按預期工作。請幫我解決一下這個。這裏是.htaccess文件的代碼。301重定向URL附加查詢字符串

Options +FollowSymLinks +SymLinksIfOwnerMatch -MultiViews 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^mydomain.com [NC] 
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301] 
RewriteBase/
rewriterule ^(.*)/(.*)\.html$ product.php?id=$1&name=$2 [L] 
rewriterule ^deals/(.*)$ details.php?id=$1 [L] 
rewritecond %{SERVER_PORT} 80 
rewritecond %{REQUEST_URI} publisher.php 

Redirect 301 /deals/74/product-name.html http://mydomain.com/74/product-name.html 

每當我進入www.mydomain.com/deals/74/product-name.html,它重定向我「www.mydomain.com/deals/74/product-name.html?id=74 & name = product-name「

我不確定爲什麼在url後追加」?id = 74 & name = product-name「?我只想顯示「www.mydomain.com/deals/74/product-name.html」

我不知道如何解決這個問題。如果你能指導我,我會很感激。

回答

0

第一。它花了約。整整一天找出解決方案。我希望我的回答可以幫助別人,

Options +FollowSymLinks +SymLinksIfOwnerMatch -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteRule ^deals/74/product-name.html$ 74/product-name.html [R=301,L] 

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

RewriteRule ^(.*)/(.*)\.html$ product.php?id=$1&name=$2 


rewritecond %{SERVER_PORT} 80 
rewritecond %{REQUEST_URI} publisher.php 
RewriteRule ^(.*)$ publisher.php [L] 

我把最後一行的 「重寫規則^交易/ 74 /產品name.html $ 74 /產品name.html [R = 301,L]」 並粘貼首先是重寫規則,它工作。我想這與其他一些重寫規則是重疊的。但最後,它的工作如我所料。

再次感謝大家。 :-)

1

我認爲這是因爲你有「飢餓的胸部」 - (.*)/(.*)。適合薩莎格雷,但不適合.htaccess。

我相信.htaccess一定很乾淨有光澤。

喜歡我總是用:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule . index.php [QSA,L] 
</IfModule> 

所有URL開始檢查和PHP rewrited(或者,如果你想用速度nginx的),但必須的.htaccess乾淨。讀取簡單,重寫簡單(對nginx或其他服務器)。

的index.php:

if (substr($_SERVER['HTTP_HOST'], 0, 4) != 'www.'){ 
    $protocol = (substr(PHP_SAPI, 0, 3) == 'cgi' ? 'Status:' : $_SERVER['SERVER_PROTOCOL']); 

    header($protocol.' 301 Moved Permanently'); 
    header('Location: http://www.mydomain.com'.$_SERVER['REQUEST_URI']); 

    exit; 
} 

// Simple path checker 
$uri = trim($_SERVER['REQUEST_URI'], '/'); 
$path = pathinfo($uri); 

// Check 

if ($path['extension'] == '.html'){ 
    $_GET['id'] = $path['dirname']; 
    $_GET['name'] = $path['filename']; 

    include 'product.php'; 
    exit; 
} 

if ($path['dirname'] == 'deals'){ 
    $_GET['id'] = $path['filename']; 

    include 'details.php'; 
    exit; 
} 
+1

+1對於Sasha和模式名稱。 – goodeye

+0

lexa,感謝您的回覆,但我',在LAMP服務器上使用.htaccess文件。我想在Windows服務器的web.config文件中使用「」。此外,我不想修改PHP文件只是想301重定向使用.htaccess – prototype

+0

你好lexa,謝謝你的幫助。我想出解決方案併發布了答案。順便說它不是因爲「飢餓的胸部」,胸部並不壞。大聲笑;-) – prototype

0

看重定向指令文檔在:http://httpd.apache.org/docs/current/mod/mod_alias.html#redirect

在那裏,你可以看到:

如果客戶要求http://example.com/service/foo.txt,它會被告知改爲訪問 http://foo2.example.com/service/foo.txt。這包括使用GET參數的請求, 如http://example.com/service/foo.pl?q=23&a=42,它將被重定向到 http://foo2.example.com/service/foo.pl?q=23&a=42。請注意,POST將被丟棄。

在你的配置最後一條規則是:

Redirect 301 /deals/74/product-name.html http://mydomain.com/74/product-name.html 

mod_alias中會追加所有GET參數

如果你不想讓GET參數附加,也許你可能會改變重定向規則重寫規則 喜歡的東西:

Rewrite ^/deals/74/product-name.html http://mydomain.com/74/product-name.html [R=301] 

+0

你好futuretelematics,感謝您的答覆。我試圖重寫,但它不工作。 – prototype

+0

您好,先生,謝謝您的幫助。我想出解決方案併發布了答案。 – prototype

0

我不確定它爲什麼在URL之後追加「?id = 74 & name = product-name」?

它這樣做,因爲你的URI /deals/74/product-name.html是匹配了這兩個規則:

RewriteRule ^(.*)/(.*)\.html$ product.php?id=$1&name=$2 [L] 

Redirect 301 /deals/74/product-name.html http://mydomain.com/74/product-name.html 

這是不要混用 mod_alias中和mod_rewrite的一起是個好主意。最好使用mod_rewrite本身來進行更精細和細化的控制。

你修改的.htaccess:

所有感謝大家誰迴應,並試圖幫助我的
Options +FollowSymLinks +SymLinksIfOwnerMatch -MultiViews 
RewriteEngine On 
RewriteBase/

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

RewriteRule ^deals/(74/product-name\.html)$ /$1 [L,R=301,NC] 

RewriteCond %{REQUEST_URI} !/74/ [NC] 
RewriteRule ^([^/]+)/([^.]+)\.html$ /product.php?id=$1&name=$2 [L] 

RewriteRule ^deals/(.*)$ /details.php?id=$1 [L] 

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} /publisher.php [L] 
+0

你好anubhava,謝謝你的回覆。我試過你的代碼,但它不工作。它現在發現頁面並且所有頁面停止工作。 – prototype

+0

哪個網址不適合你? – anubhava

+0

當我上傳新的.htaccess,所有的網址停止工作 – prototype

相關問題