2015-09-07 21 views
0

我在/ shop子目錄中使用了Opencart 2.x版本和商店。 我知道如何啓用seo_url(.htaccess.txt - > .htaccess,將RewriteBase設置爲/ shop /並在管理面板中啓用SEO網址)。如何將<a>中的網址自動更改爲Opencart 2.x?

徐網址作品和我的鏈接像information/information_id=1變更爲/faq

問題是,如果我加入url_alias表中的記錄:inforamtion/contact = contact - 這個URL工作,但在網站上它仍然看起來像/shop/index.php?route=information/contact不是/shop/contact

我認爲它應該自動更改,但不是。產品,類別和信息頁面的所有網站鏈接都已更改,但手動添加的是 - NOT。爲什麼?

PS:我可以在代碼中改變它,但認爲它不是很好的解決方案cos假設存在正確的方式來做我所需要的。

回答

0

在前端的哪個位置顯示非SEO友好URL(帶index.php?route =的URL)?如果您已將模板中的任何內容複製/粘貼到標記中,它們將保持原樣。 Opencart也有各種重定向和硬編碼到它的控制器文件,可能會重定向到這樣一個URL。所以這取決於這些鏈接在您的網站上的位置。

+0

頁腳的鏈接像賬戶/訂單這應該是/訂單或主要菜單在我看到的鏈接:帳戶/登錄(應/登錄),帳戶/註冊(我的意思應該是/註冊)等 – LIAL

+0

什麼該鏈接看起來像在你的footer.tpl模板中?它應該從/catalog/controller/common/footer.php獲取鏈接。這使用/system/library/url.php,它應該檢查你的'url_alias'表。它使用index.php生成一個URL?路線=部分如果沒有找到匹配,我相信。 –

+0

你可以看這裏http://ys.kz/shop/index.php?route=information/contact - 這個鏈接是在頁腳,在url_alias我有信息/聯繫人=聯繫人和鏈接ys.kz/shop/contact - 工程,但問題是爲什麼我仍然看到在頁腳不縮短的網址? (PS:抱歉,網站不是英文) – LIAL

1

我不太確定你是否已經得到了你的問題的答案,但是我會把它留在這裏,因爲花了我幾天的時間才弄清楚這個問題。

爲了從/index.php?route=information/contact改變,只是/contact,你需要兩個步驟

(你可能得到第1步已經準備好了)

  1. 在OC數據庫中執行以下插入。這涵蓋了所有(至少2.1.0.1)現在允許SEO設置的系統頁面。您可以將關鍵字更改爲您感覺更適合的任何內容。

INSERT INTO url_alias (query, keyword) VALUES ('common/home', ''); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/wishlist', 'wishlist'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/account', 'my-account'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('checkout/cart', 'shopping-cart'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('checkout/checkout', 'checkout'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/login', 'login'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/logout', 'logout'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/order', 'order-history'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/newsletter', 'newsletter'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('product/special', 'specials'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/account', 'affiliates'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('checkout/voucher', 'gift-vouchers'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('product/manufacturer', 'brands'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('information/contact', 'contact-us'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/return/insert', 'request-return'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('information/sitemap', 'sitemap'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/forgotten', 'forgot-password'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/download', 'downloads'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/return', 'returns'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/transaction', 'transactions'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/register', 'create-account'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('product/compare', 'compare-products'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('product/search', 'search'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/edit', 'edit-account'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/password', 'change-password'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/address', 'address-book'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('account/reward', 'reward-points'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/edit', 'edit-affiliate-account'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/password', 'change-affiliate-password'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/payment', 'affiliate-payment-options'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/tracking', 'affiliate-tracking-code'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/transaction', 'affiliate-transactions'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/logout', 'affiliate-logout'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/forgotten', 'affiliate-forgot-password'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/register', 'create-affiliate-account'); 
 
INSERT INTO url_alias (query, keyword) VALUES ('affiliate/login', 'affiliate-login');

  • 您需要修改以下catalog/common/seo_url.php文件,如下所示:
  • <?php 
     
    class ControllerCommonSeoUrl extends Controller { 
     
    \t public function index() { 
     
    \t \t // Add rewrite to url class 
     
    \t \t if ($this->config->get('config_seo_url')) { 
     
    \t \t \t $this->url->addRewrite($this); 
     
    \t \t } 
     
    
     
    \t \t // Decode URL 
     
    \t \t if (isset($this->request->get['_route_'])) { 
     
    \t \t \t $parts = explode('/', $this->request->get['_route_']); 
     
    
     
    \t \t \t // remove any empty arrays from trailing 
     
    \t \t \t if (utf8_strlen(end($parts)) == 0) { 
     
    \t \t \t \t array_pop($parts); 
     
    \t \t \t } 
     
    
     
    \t \t \t foreach ($parts as $part) { 
     
    \t \t \t \t $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); 
     
    
     
    \t \t \t \t if ($query->num_rows) { 
     
    \t \t \t \t \t $url = explode('=', $query->row['query']); 
     
    
     
    \t \t \t \t \t if ($url[0] == 'product_id') { 
     
    \t \t \t \t \t \t $this->request->get['product_id'] = $url[1]; 
     
    \t \t \t \t \t } 
     
    
     
    \t \t \t \t \t if ($url[0] == 'category_id') { 
     
    \t \t \t \t \t \t if (!isset($this->request->get['path'])) { 
     
    \t \t \t \t \t \t \t $this->request->get['path'] = $url[1]; 
     
    \t \t \t \t \t \t } else { 
     
    \t \t \t \t \t \t \t $this->request->get['path'] .= '_' . $url[1]; 
     
    \t \t \t \t \t \t } 
     
    \t \t \t \t \t } 
     
    
     
    \t \t \t \t \t if ($url[0] == 'manufacturer_id') { 
     
    \t \t \t \t \t \t $this->request->get['manufacturer_id'] = $url[1]; 
     
    \t \t \t \t \t } 
     
    
     
    \t \t \t \t \t if ($url[0] == 'information_id') { 
     
    \t \t \t \t \t \t $this->request->get['information_id'] = $url[1]; 
     
    \t \t \t \t \t } 
     
    
     
    \t \t \t \t \t if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') { 
     
    \t \t \t \t \t \t $this->request->get['route'] = $query->row['query']; 
     
    \t \t \t \t \t } 
     
    \t \t \t \t } else { 
     
    \t \t \t \t \t $this->request->get['route'] = 'error/not_found'; 
     
    
     
    \t \t \t \t \t break; 
     
    \t \t \t \t } 
     
    \t \t \t } 
     
    
     
    \t \t \t if (!isset($this->request->get['route'])) { 
     
    \t \t \t \t if (isset($this->request->get['product_id'])) { 
     
    \t \t \t \t \t $this->request->get['route'] = 'product/product'; 
     
    \t \t \t \t } elseif (isset($this->request->get['path'])) { 
     
    \t \t \t \t \t $this->request->get['route'] = 'product/category'; 
     
    \t \t \t \t } elseif (isset($this->request->get['manufacturer_id'])) { 
     
    \t \t \t \t \t $this->request->get['route'] = 'product/manufacturer/info'; 
     
    \t \t \t \t } elseif (isset($this->request->get['information_id'])) { 
     
    \t \t \t \t \t $this->request->get['route'] = 'information/information'; 
     
    \t \t \t \t } 
     
    \t \t \t } 
     
    
     
    \t \t \t if (isset($this->request->get['route'])) { 
     
    \t \t \t \t return new Action($this->request->get['route']); 
     
    \t \t \t } 
     
    \t \t } 
     
    \t } 
     
    
     
    \t public function rewrite($link) { 
     
    \t \t $url_info = parse_url(str_replace('&amp;', '&', $link)); 
     
    
     
    \t \t $url = ''; 
     
    
     
    \t \t $data = array(); 
     
    
     
    \t \t parse_str($url_info['query'], $data); 
     
    
     
    \t \t foreach ($data as $key => $value) { 
     
    \t \t \t if (isset($data['route'])) { 
     
    \t \t \t \t if (($data['route'] == 'product/product' && $key == 'product_id') || (\t ($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { 
     
    \t \t \t \t \t $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); 
     
    
     
    \t \t \t \t \t if ($query->num_rows && $query->row['keyword']) { 
     
    \t \t \t \t \t \t $url .= '/' . $query->row['keyword']; 
     
    
     
    \t \t \t \t \t \t unset($data[$key]); 
     
    \t \t \t \t \t } 
     
    \t \t \t \t } elseif ($key == 'path') { 
     
    \t \t \t \t \t $categories = explode('_', $value); 
     
    
     
    \t \t \t \t \t foreach ($categories as $category) { 
     
    \t \t \t \t \t \t $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); 
     
    
     
    \t \t \t \t \t \t if ($query->num_rows && $query->row['keyword']) { 
     
    \t \t \t \t \t \t \t $url .= '/' . $query->row['keyword']; 
     
    \t \t \t \t \t \t } else { 
     
    \t \t \t \t \t \t \t $url = ''; 
     
    
     
    \t \t \t \t \t \t \t break; 
     
    \t \t \t \t \t \t } 
     
    \t \t \t \t \t } 
     
    
     
    \t \t \t \t \t unset($data[$key]); 
     
    \t \t \t \t } elseif ($key == 'route') { 
     
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $value . "'"); 
     
    
     
            if ($query->num_rows && ($query->row['keyword'] || $query->row['keyword'] == '')) { 
     
             $url .= '/' . $query->row['keyword']; 
     
    
     
             unset($data[$key]); 
     
            } 
     
           } 
     
    \t \t \t } 
     
    \t \t } 
     
    
     
    \t \t if ($url) { 
     
    \t \t \t unset($data['route']); 
     
    
     
    \t \t \t $query = ''; 
     
    
     
    \t \t \t if ($data) { 
     
    \t \t \t \t foreach ($data as $key => $value) { 
     
    \t \t \t \t \t $query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((string)$value); 
     
    \t \t \t \t } 
     
    
     
    \t \t \t \t if ($query) { 
     
    \t \t \t \t \t $query = '?' . str_replace('&', '&amp;', trim($query, '&')); 
     
    \t \t \t \t } 
     
    \t \t \t } 
     
    
     
    \t \t \t return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; 
     
    \t \t } else { 
     
    \t \t \t return $link; 
     
    \t \t } 
     
    \t } 
     
    }

    這將重寫您在url_alias表中分配給該路線的任何SEO關鍵字的所有鏈接。

    就是這樣!希望這可以幫助更多的人,因爲在所有代碼中潛水是一種痛苦。