0

我必须重写大量 URL, 例如: FROM: http://www.lespoulettes-bijoux.fr/produit2.asp?id_produit=8489 TO: http://www.lespoulettes-bijoux.fr/colliers-femme-createur -fantaisie/femme-collier-ras-de-cou-fils-d-argent-et-6-perles-blanches-et-grises-10005.html

所以我选择做一个 RewriteMap 因为我的 URL 没有相同的 ID 来匹配。

所以我宣布了我的 RewriteMap 是这样的:

8489 http://www.lespoulettes-bijoux.fr/colliers-femme-createur-fantaisie/femme-collier-ras-de-cou-fils-d-argent-et-6-perles-blanches-et-grises-10005.html

在我的 .htacess 中:我想转换我的 URL 以将我的 GET 参数 (id_produit) 转换为一个内部 id,以便在我的 ReWriteMap 之后将其 git。

问题:我在转换我的 URL 时遇到错误 500,并且我不知道转换后的正确语法来切换它:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^id_produit\=(.+)$
RewriteRule (.*) /$1/id=%1 <== HERE 500 Internal Server Error
#RewriteRule ^/id_produit.asp/(.*)$ ${map_product:$1} [R]

恢复:我想将“www.exemple.com/produit2.asp?id_produit=8489”切换到 www.exemple.com/produit2.asp/id=8489 并将 id 发送到我的 RewriteMap 以重定向到正确的 URL。

谢谢你的帮助!

4

2 回答 2

0

我几乎有解决方案:

RewriteCond %{QUERY_STRING} ^id_produit\=(.+)$
RewriteRule (.*) /$1/%1? [L]
RewriteRule ^produit2.asp/(.*)$ ${map_product:$1} [R,L]

将我重定向到我的地图,但在我的 URL 中间添加 /var/www/les-poulettes-bijoux/:

/produit2.asp?id_produit=8489 => http://www.lespoulettes-bijoux.fr/var/www/les-poulettes-bijoux/colliers-femme-createur-fantaisie/femme-collier-ras-de-cou- fils-d-argent-et-6-perles-blanches-et-grises-10005.html

但我需要http://www.lespoulettes-bijoux.fr/colliers-femme-createur-fantaisie/femme-collier-ras-de-cou-fils-d-argent-et-6-perles-blanches-et-grises -10005.html

如何删除 URL 中无用的部分?

于 2015-08-13T08:32:51.247 回答
0

这里的问题大概是:

RewriteCond %{QUERY_STRING} ^id_produit\=(.+)$
RewriteRule (.*) /$1/id=%1 <== HERE 500 Internal Server Error

这导致了一个循环。重写引擎循环,所以在重写之后,结果仍然会匹配这个规则,因此会再次被重写。尝试?在末尾添加 a 以便删除查询字符串:

RewriteCond %{QUERY_STRING} ^id_produit\=(.+)$
RewriteRule (.*) /$1/id=%1? [L]

此外,您需要删除正则表达式中的前导斜杠。请求 URI 的前导斜杠在基于每个目录的规则中(如在 htaccess 文件中)被剥离,因此正则表达式需要如下所示:

RewriteRule ^id_produit.asp/(.*)$ ${map_product:$1} [R,L]

条规则需要在你的其他规则之前。

于 2015-08-12T14:51:31.627 回答