.htaccess mod#u使用参数将旧URL重写为新URL';s、 但是在新URL中使用旧参数

.htaccess mod#u使用参数将旧URL重写为新URL';s、 但是在新URL中使用旧参数,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个棘手的重写情况,我需要将有参数的旧URL重写为新URL,但同时将旧(现在无效)URL的参数附加到新URL 示例:ring details.php?product=MQ=&hash=376FGE367ER872CBD5的旧链接现在将成为rings/ring details/23.htm,其中数字23实际上是上面产品URL的base64_解码值 所以我基本上需要这样做: 检查请求的页面是否为ring-details.php,并且是否存在 是否存在参数“产品”。散列不再使用 获取产品参数值(

我有一个棘手的重写情况,我需要将有参数的旧URL重写为新URL,但同时将旧(现在无效)URL的参数附加到新URL

示例:ring details.php?product=MQ=&hash=376FGE367ER872CBD5的旧链接现在将成为rings/ring details/23.htm,其中数字23实际上是上面产品URL的base64_解码值

所以我基本上需要这样做:

  • 检查请求的页面是否为ring-details.php,并且是否存在 是否存在参数“产品”。散列不再使用

  • 获取产品参数值(MQ==),base64\u对其进行解码

  • 将解码后的值附加到新URL:rings/ring detail/$1.htm 其中$1是解码后的产品URL参数


我并不是要求被填鸭式地灌输,但任何提示或好的资源都会很好。谢谢,

据我所知,您无法在.htaccess/mod_rewrite中解码Base64。但是,您可以通过PHP进行变通

因此,您必须捕获旧URL并将其重写为PHP文件,该文件将对Base64进行解码并重定向到新URL

.htaccess
的内容:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^&]+)
RewriteRule ring-details\.php$ redirect.php?product=%1 [L]
redirect.php的内容

<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301);
?>

据我所知,您无法在.htaccess/mod_rewrite中解码Base64。但是,您可以通过PHP进行变通

因此,您必须捕获旧URL并将其重写为PHP文件,该文件将对Base64进行解码并重定向到新URL

.htaccess
的内容:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^&]+)
RewriteRule ring-details\.php$ redirect.php?product=%1 [L]
redirect.php的内容

<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301);
?>

您可以(重写映射,prg:type)——但这与您的解决方案几乎相同,只是“不同的味道”。我个人会走这条路。@Floern-谢谢!这是一个经过深思熟虑的解决方案,虽然效果不错,但它的好处是,我仍然可以查询数据库,获取产品标题,并将其附加到URL以获得更详细的URL描述。谢谢你,弗洛恩,我说得太快了。现在看来,即使是对有效的新URL(如/rings/some ring/23.htm)的请求也会被重定向到重定向php脚本,尽管它们的规则是在上面的规则之后指定的?@Floern-我通过检查旧URL是否有参数product和hash进行了分类,因为新URL不再有hash,这是一张不错的支票。我的规则:
RewriteCond%{QUERY_STRING}product=(.*)和hash=(.*)RewriteRule-ring-details\.php 301\.php?t=ring&p=%1[L]
You“某种程度上”可以(RewriteMap,prg:type)--但这与您的解决方案几乎相同,只是“味道不同”。我个人会走这条路。@Floern-谢谢!这是一个经过深思熟虑的解决方案,虽然效果不错,但它的好处是,我仍然可以查询数据库,获取产品标题,并将其附加到URL以获得更详细的URL描述。谢谢你,弗洛恩,我说得太快了。现在看来,即使是对有效的新URL(如/rings/some ring/23.htm)的请求也会被重定向到重定向php脚本,尽管它们的规则是在上面的规则之后指定的?@Floern-我通过检查旧URL是否有参数product和hash进行了分类,因为新URL不再有hash,这是一张不错的支票。我的规则:
RewriteCond%{QUERY_STRING}product=(.*)和hash=(.*)RewriteRule-ring-details\.php 301\.php?t=ring&p=%1[L]