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

そしてそれはSEOを破壊します。

最初のURLと同じように2番目の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に移動し、メソッドを見つけ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);
  }

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

  return $url; 
}

ルートフォルダの.htaccessを変更し、URLの生成方法を変更したので、管理者の部分についても覚えておく必要があります。adminにきれいなURLが表示されている場合は、ルートフォルダから/adminフォルダに.htaccessをコピーするだけです。

link管理者側で元のURLを保存する場合は、次の方法でメソッドを少し変更する必要があります。

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 に答える