用RewriteMap错误重写URL

时间:2015-08-12 14:30:13

标签: .htaccess mod-rewrite url-rewriting url-redirection rewritemap

我必须重写大量的网址 的 e.g: 来自: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,因为我的网址没有相同的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。

问题:转换我的网址时出现错误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。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这里的问题可能是:

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

导致循环。重写引擎循环,所以在重写之后,结果将仍然匹配此规则,从而再次重写。尝试在末尾添加?,以便删除查询字符串:

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

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

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

此规则需要先于您的其他规则。

答案 1 :(得分:0)

我几乎有解决方案:

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

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

/produit2.asp?id_produit=8489 =&GT; 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

如何在网址中删除无用的部分?