2011-07-01 46 views
0

我原來用PHP做了我的網站,並使用了頁面/產品標識的參數。.htaccess改寫失敗

ex.) http://mysite.com/?pid=my_products&sid=golf_clubs&GTIN=111111111111 

現在我已經搬了使用回報率,我想建立重定向清理

http://mysite.com/my_products/golf_clubs/111111111111 

我已經看了教程的網址和到達這一點:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ ?pid=$1&sid=$2&GTIN=$3 [NC] 

我測試過一個url,它根本沒有重定向。我試圖把這個.htaccess文件中調試和chmodded日誌文件夾到775,但我得到一個500錯誤:

RewriteLog "/home/myaccount/rails_apps/myapp/log/rewrite.log" 
RewriteLogLevel 3 

至於改寫報表中的.htaccess去,這是我有:

RewriteEngine On 
RewriteLog "/home/myaccount/rails_apps/myapp/log/rewrite.log" 
RewriteLogLevel 3 
RewriteBase/
RewriteCond %{REQUEST_URI} ^/downloads.* 
RewriteRule .* - [L] 

RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ pid=$1&sid=$2&GTIN=$3 [NC] 

RewriteRule ^$ index.html [QSA] 
RewriteRule ^([^.]+)$ $1.html [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] 

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly" 

*我與BlueHost的共享的託管計劃(好天哪我希望他們能更新很快的Rails 3)

+0

據我所知你想從舊樣式的URL'http://mysite.com/?pid=my_products&sid=golf_clubs>IN=111111111111'重定向**爲新樣式'http://mysite.com/my_products/golf_clubs/111111111111'?如果是這樣 - 那麼你的規則不幸地以其他方式做。 – LazyOne

回答

0

如果我理解正確的話,你有你的規則倒退。你想抓住你的舊網址並將它們重寫爲新格式,對嗎?在這種情況下,你想這樣:

RewriteRule ^\?pid=(\w+)\&sid=(\w+)\&GTIN=(\w+) /$1/$2/$3 [NC,R=301,L] 

添加301個狀態會告訴用戶代理(包括乖巧的搜索機器人),你的標準網址已永久性地改變。

+0

這不起作用 - 'RewriteRule'不能用這種查詢字符串 - 請嘗試'RewriteCond'。 – LazyOne

+0

考慮到你的評論後,它在重定向的地方,但在沒有第二和第三參數的情況下添加雙斜槓「//」。 RewriteCond%{QUERY_STRING}^pid =(\ w +)(?:\&sid =(\ w +))?(?:\&GTIN =(\ w +))? RewriteRule^$%1 /%2 /%3 [NC,R = 301,L] – JakeTheSnake

+0

@Jake在這種情況下(當缺少某些參數時)僅爲3,2和1參數創建3條單獨的規則。否則,您將不得不在RoR應用程序中發出重定向,因爲我不知道如何在缺少參數時插入默認值。 – LazyOne