1

我已将网站从 WordPress 重组为 Opencart,因此所有 URL 都已更改。我正在尝试用新产品重定向我的旧产品页面,但它没有重定向,因为 OpenCart 添加了一些奇怪的东西?route=等等。

这是我的 .htaccess

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [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]
Redirect 301 /store/products/old-item-name/ http://store.mydomain.com/new-item-name

它正在重定向到这个奇怪的网址

http://store.mydomain.com/new-item-name?_route_=store/products/old-item-name/

感谢您的大力帮助..百万谢谢

4

3 回答 3

1

这是因为它Redirect是 mod_alias 的一部分,而其他一切都是 mod_rewrite 的一部分。这两个模块在 URL 文件处理管道的不同点应用,在这种情况下,两个模块都应用您的请求。您需要将重定向移到顶部并坚持使用 mod_rewrite:

所以删除:

Redirect 301 /store/products/old-item-name/ http://store.mydomain.com/new-item-name

并将其添加到顶部:

RewriteRule ^products/old-item-name(/.*)$ http://store.mydomain.com/new-item-name$1 [L,R=301]
于 2013-09-18T18:54:38.363 回答
0

从 Ashop 迁移到 OpenCart 时遇到了类似的问题

旧网址的格式为 http://www.example.com/p/productid/manufacturer-productname.html

并被重定向到

http://www.example.com/manufacturer/

解决方案是

RewriteRule ^(.*)manufacturer(-.*|)$ http://www.example.com/manufacturer/ [NC,L,R=301]

希望对某人有所帮助.....

请注意,您不能直接匹配制造商,因为会发生重定向循环,因此匹配包含“-”

于 2014-09-18T04:34:42.743 回答
0

最后一条规则Redirect 301被前RewriteRule一条规则重定向。一般来说,它不建议混合mod_aliasmod_rewrite

尝试将最后一个更改RewriteRule为:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# your 301 rules from old to new
RewriteRule ^products/old-item-name(/.*|)$ new-item-name$1 [NC,L,R=301]

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase\.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(ico|gif|jpe?g|png|js|css)$ [NC]
RewriteRule ^(.*)$ index.php?_route_=$1 [L,QSA]
于 2013-09-18T18:50:50.743 回答