1

我是 .NET 开发人员,但我的朋友打电话给我寻求支持。我对 .htaccess 做了一些更改,但我的 SEO 已损坏。

一切都以 url 上的“www”标签开始。我看到当我们不使用“www”时会出现一些错误,我更改了 .htaccess。我添加了重写规则并将 mysite.com 重定向到 www.mysite.com。我们的问题解决了,但现在我们有另一个问题。

我们正在使用 Opencart - SEO 并且它已启用。我们的产品看起来像

http://www.mysite.com/epson-claria-uyumlu-yazici-kartus-dolum-murekkebi-500g.html

当我们到达 www 时。

但是,如果我删除 url 上的“www”标签,看起来就像

http://www.mysite.com/index.php?_route_=epson-claria-uyumlu-yazici-kartus-dolum-murekkebi-500g.html

它破坏了搜索引擎优化。

我想看到第二个 url 像第一个一样。

我试过玩 seo_url.php , .htaccess 但它不会改变任何东西。

我也尝试过从 OpenCart 中删除 index.php?route=common/home 的解决方案,但它对我不起作用。

现在我的 seo_url.php 是默认的,我取回我的更改。我的 .htaccess 是

# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ 

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^index\.php$ http://www.mysite.com? [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.mysite\.com$
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L] 

RewriteRule ^(.*)$ index.php?_route_=$1 [L]

请在我发疯之前帮助我。我为此花了 3 个小时。

谢谢大家,问候

4

4 回答 4

5

试试这个它使用.htaccess 对我有用。

RewriteCond %{THE_REQUEST} \ /index\.php\?_route_=?([^&\ ]*)
RewriteRule ^ /%1? [L,R]
于 2015-08-25T09:17:36.633 回答
1

也有同样的问题,我发现任何问题都没有解决我的问题。但!我记得我也在使用 Laravel 并且在这个引擎中运行良好的 url 路径。不要问我为什么将 OpenCart 与 Laravel 联系起来。所以我在系统 -> 设置 -> 服务器中启用了 SEO 单选按钮,你也可以禁用它我看不出网站工作有什么不同。

该解决方案由几个部分组成:

1.在您的根文件夹中,将.htaccess文件内容替换为下一个 shapshot:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?route=$1 [L]
</IfModule>

2./system/library/url.php找到linkmethod 替换为next:

public function link($route, $args = '', $secure = false) {
  if ($this->ssl && $secure) {
    $url = $this->ssl . 'index.php?route=' . $route;
  } else {
    $url = $this->url . 'index.php?route=' . $route;
  }

  if ($args) {
    if (is_array($args)) {
      $url .= '&amp;' . http_build_query($args);
    } else {
      $url .= str_replace('&', '&amp;', '&' . ltrim($args, '&'));
    }
  }

  foreach ($this->rewrite as $rewrite) {
    $url = $rewrite->rewrite($url);
  }

  $url = str_replace('index.php?route=', '', $url);

  return $url; 
}

由于您更改了根文件夹中的.htaccess并更改了 url 生成方法,您还需要记住管理部分。如果您在 admin 中看到漂亮的 url,只需将 .htaccess 从根文件夹复制到 /admin 文件夹

如果你想在管理端保存原始 url,你必须稍微改变link下一个方法:

public function link($route, $args = '', $secure = false) {
  if ($this->ssl && $secure) {
    $url = $this->ssl . 'index.php?route=' . $route;
  } else {
    $url = $this->url . 'index.php?route=' . $route;
  }

  if ($args) {
    if (is_array($args)) {
      $url .= '&amp;' . http_build_query($args);
    } else {
      $url .= str_replace('&', '&amp;', '&' . ltrim($args, '&'));
    }
  }

  foreach ($this->rewrite as $rewrite) {
    $url = $rewrite->rewrite($url);
  }

  //  Skip admin path
  if (strpos($_SERVER['REQUEST_URI'], '/admin') !== 0) {
    $url = str_replace('index.php?route=', '', $url);
  }

  return $url; 
}

结果:

http://YOUR_SITE/index.php?route=product/product&product_id=52

http://YOUR_SITE/product/product&product_id=52

http://YOUR_SITE/index.php?route=account/login

http://YOUR_SITE/account/login

于 2019-02-19T21:40:29.550 回答
0

试试这个。。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
于 2012-12-13T07:52:53.397 回答
0

我知道的老问题,但也许有人会觉得它有帮助:如果您更改 HTACCESS 规则,SEO url 中断的原因是它们依赖于_route_澄清“是的,这是对干净 url 的请求,不,它不是标准路线”。

如果您index.php?_route_=在 HTACCESS 中进行更改,您还必须更改 中的_route_IF 条件/catalog/controller/common/seo_url.php。它可能会被严重迷惑,但如果你这样做,请先在测试商店尝试。

_route_在日志或分析日志之类的内容中,除了您之外,什么都不应该看到,因为它是一个被屏蔽的实用程序 uri。如果你看到真人在问链接是什么,那么就采取行动。否则,最好离开它。

于 2014-07-02T17:52:50.260 回答