我有一个问题.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]
我尝试了我在这个网站上找到的一些解决方案,但它们不适用于我的情况。非常感谢。
1条答案
按热度按时间7lrncoxx1#
(From您发布URL和规则应该是
slug=dx
,而不是slug=gx
?)mod_alias
Redirect
指令和mod_rewriteRewriteRule
指令之间存在冲突。mod_rewrite在 * mod_alias之前被处理(不管指令的明显顺序),并重写请求,附加查询字符串。然后Redirect
在 * 原始 * URL路径上发出重定向,但附加重写的查询字符串。不使用mod_alias
Redirect
指令,您需要使用mod_rewriteRewriteRule
来执行重定向。这必须在现有重写之前进行。例如:
为了保存重复,我在第一个规则(重定向)中捕获了URL路径,并在 substitition 字符串中使用了相应的反向引用
$1
。我还修改了第二条规则(重写)中的正则表达式,因为它太通用了,效率很低(需要大量的回溯)。