【问题标题】:Apache rewrite + Magento don't work as expectedApache rewrite + Magento 无法按预期工作
【发布时间】:2017-06-04 05:07:55
【问题描述】:

我需要为我的 Magento 1 商店实现以下重写规则 - 如果查询字符串包含 param1param2 并且 URI 不是 /myfilter/,则删除它。

这是一个例子:

www.mystore.com/myfilter/ --> www.mystore.com/myfilter/

www.mystore.com/myfilter/?param1=1 --> www.mystore.com/myfilter/param1=1

www.mystore.com/<something>/?param1=1 --> www.mystore.com/<something>/

www.mystore.com/<something>/?param2=2 --> www.mystore.com/<something>/

我在 .htaccess 中添加了以下内容:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/myfilter/?
RewriteCond %{QUERY_STRING} param1 [OR]
RewriteCond %{QUERY_STRING} param2
RewriteRule (.*) /$1? [R=301,L]

在标准 Magento 重定向之前:

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

但它的工作方式错误。 这些 URL 有效:

www.mystore.com/myfilter/ --> www.mystore.com/myfilter/

www.mystore.com/myfilter/?param3=1 --> www.mystore.com/myfilter/?param3=1

www.mystore.com/<something>/?param1=1 --> www.mystore.com/<something>/

www.mystore.com/<something>/?param2=2 --> www.mystore.com/<something>/

但是当 URI 包含 /myfilter/param1param2 时,它会将我重定向到 /index.php

www.mystore.com/myfilter/?param1=1 --> www.mystore.com/index.php

我错过了什么吗?

【问题讨论】:

  • 也尝试发布关于服务器故障的问题。
  • @M.Gara 这不是关于服务器故障的主题。查看Server Fault的How to Ask
  • 这不是服务器故障,我可以在不同的服务器上看到相同的行为,包括我的本地 apache。这与 Magento 的重写和 apache 有关。
  • @theProgrammer101,我不完全确定你认为什么是不完整/无法验证的?
  • 已解决并使用解决方案更新问题:)

标签: apache .htaccess magento


【解决方案1】:

这些规则是我需要的一个技巧:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(index.php/)?myfilter/ [NC]
RewriteCond %{QUERY_STRING} param1 [OR]
RewriteCond %{QUERY_STRING} param2
RewriteRule (.*) /$1? [R=301,L]

RewriteCond %{REQUEST_URI} ^/myfilter/ [NC]
RewriteRule (.*) index.php/myfilter/ [L]

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 2014-11-26
    • 2014-10-25
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2013-12-23
    • 2014-12-09
    • 2016-01-13
    相关资源
    最近更新 更多