2012-03-21 151 views
0

我想http://example.com/index.php?route=checkout/cart显示为http://example.com/cart。几天前,我在stackoverflow中找到了答案(http://stackoverflow.com/q/7578055/1236271)。我在seo_url文件中进行了必要的更改,并更新了数据库,但它仍然不适用于我。我的seo_url文件有错误吗?这是我的seo_url.php文件。如何在OpenCart中创建自定义的SEO友好的URL?

<?php 

class ControllerCommonSeoUrl extends Controller { 
public function index() { 
    // Add rewrite to url class 
    if ($this->config->get('config_seo_url')) { 
     $this->url->addRewrite($this); 
    } 
    // Decode URL 
    if (isset($this->request->get['_route_'])) { 
     $parts = explode('/', $this->request->get['_route_']); 
     foreach ($parts as $part) { 
      $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); 

      if ($query->num_rows) { 
       $url = explode('=', $query->row['query']);     

       if ($url[0] == 'product_id') { 
        $this->request->get['product_id'] = $url[1]; 
       }     

       if ($url[0] == 'category_id') { 
        if (!isset($this->request->get['path'])) { 
         $this->request->get['path'] = $url[1]; 
        } else { 
         $this->request->get['path'] .= '_' . $url[1]; 
        } 
       }    

       if ($url[0] == 'manufacturer_id') { 
        $this->request->get['manufacturer_id'] = $url[1]; 
       }    

       if ($url[0] == 'information_id') { 
        $this->request->get['information_id'] = $url[1]; 
       } 
      } else { 
       $this->request->get['route'] = 'error/not_found'; 
      } 
     }   

     if (isset($this->request->get['product_id'])) { 
      $this->request->get['route'] = 'product/product'; 
     } elseif (isset($this->request->get['path'])) { 
      $this->request->get['route'] = 'product/category'; 
     } elseif (isset($this->request->get['manufacturer_id'])) { 
      $this->request->get['route'] = 'product/manufacturer/product'; 
     } elseif (isset($this->request->get['information_id'])) { 
      $this->request->get['route'] = 'information/information'; 
     } 
     else { 
          $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'"); 
      if ($query->num_rows) { 
       $this->request->get['route'] = $query->row['query']; 
      } 
     } 
     if (isset($this->request->get['route'])) { 
      return $this->forward($this->request->get['route']); 
     } 
    } 
} 



public function rewrite($link) { 

    if ($this->config->get('config_seo_url')) { 

     $url_data = parse_url(str_replace('&amp;', '&', $link)); 



     $url = ''; 



     $data = array(); 



     parse_str($url_data['query'], $data); 



     foreach ($data as $key => $value) { 

      if (isset($data['route'])) { 

       if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { 

        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'"); 



        if ($query->num_rows) { 

         $url .= '/' . $query->row['keyword']; 



         unset($data[$key]); 

        }     

       } elseif ($key == 'path') { 

        $categories = explode('_', $value); 



        foreach ($categories as $category) { 

         $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'"); 



         if ($query->num_rows) { 

          $url .= '/' . $query->row['keyword']; 

         }       

        } 



        unset($data[$key]); 

       } 

       else { 
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'"); 

        if ($query->num_rows) { 
         $url .= '/' . $query->row['keyword']; 

         unset($data[$key]); 
        } 
       } 


      } 

     } 



     if ($url) { 

      unset($data['route']); 



      $query = ''; 



      if ($data) { 

       foreach ($data as $key => $value) { 

        $query .= '&' . $key . '=' . $value; 

       } 



       if ($query) { 

        $query = '?' . trim($query, '&'); 

       } 

      } 



      return $url_data['scheme'] . '://' . $url_data['host'] . (isset($url_data['port']) ? ':' . $url_data['port'] : '') . str_replace('/index.php', '', $url_data['path']) . $url . $query; 

     } else { 

      return $link; 

     } 

    } else { 

     return $link; 

    }  

} 

} 

?> 
+0

有没有人解决这个问题或给我一些建议? – Subhra 2012-06-16 12:06:18

回答

0

简单的问题,你打开重写模块,或者你有你的托管解决方案启用重写模块?

你是否创造了良好的.htaccess使所有这些工作?

+0

它已启用,它也适用于所有其他人。但我如何创建自定义网址? – Subhra 2012-03-21 08:44:33