.htaccess规则到301重定向,不带参数

i2loujxw  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(311)

我有一个问题.htaccess规则:
我想重定向这个URL:
/productos/ficha/carretillas-termicas/dx.html到这一个:
/productos/ficha/carretillas-termicas/grendia-es-serie-fd20-35n3.html
我正在使用这个.htaccess规则:

Redirect 301 /productos/ficha/carretillas-termicas/dx.html /productos/ficha/carretillas-termicas/grendia-es-serie-fd20-35n3.html

但服务器重定向到:

/productos/ficha/carretillas-termicas/grendia-es-serie-fd20-35n3.html?catalogo=carretillas-termicas&slug=gx

注意到参数的排列了吗?catalogo=carretillas-termicas&slug=gx”
两个URL是相同的:

/productos/ficha/carretillas-termicas/grendia-es-serie-fd20-35n3.html?catalogo=carretillas-termicas&slug=gx
/productos/ficha/carretillas-termicas/grendia-es-serie-fd20-35n3.html

所以,我想删除的参数,以避免两个不同的网址相同的内容(搜索引擎优化问题)
生成“productos”URL的.htaccess规则如下:

# Converts urls like:
# productos_ficha.php?catalogo=XXX&slug=YYY
# to
# productos/ficha/XXX/YYY.html

RewriteRule ^(.*)/(.*)/(.*)/(.*).html$ $1_$2.php?catalogo=$3&slug=$4 [L]

我尝试了我在这个网站上找到的一些解决方案,但它们不适用于我的情况。非常感谢。

7lrncoxx

7lrncoxx1#

(From您发布URL和规则应该是slug=dx,而不是slug=gx?)
mod_alias Redirect指令和mod_rewrite RewriteRule指令之间存在冲突。mod_rewrite在 * mod_alias之前被处理(不管指令的明显顺序),并重写请求,附加查询字符串。然后Redirect在 * 原始 * URL路径上发出重定向,但附加重写的查询字符串。
不使用mod_alias Redirect指令,您需要使用mod_rewrite RewriteRule来执行重定向。这必须在现有重写之前进行。
例如:

RewriteRule ^(productos/ficha/carretillas-termicas)/dx\.html$ /$1/grendia-es-serie-fd20-35n3.html [R=301,L]

# Converts urls like:
# productos_ficha.php?catalogo=XXX&slug=YYY
# to
# productos/ficha/XXX/YYY.html

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)\.html$ $1_$2.php?catalogo=$3&slug=$4 [L]

为了保存重复,我在第一个规则(重定向)中捕获了URL路径,并在 substitition 字符串中使用了相应的反向引用$1
我还修改了第二条规则(重写)中的正则表达式,因为它太通用了,效率很低(需要大量的回溯)。

相关问题