【问题标题】:? appending to end of pathname after redirect 301 in htaccess file?在 htaccess 文件中重定向 301 后附加到路径名的末尾
【发布时间】:2013-10-17 07:14:34
【问题描述】:

这应该很简单,但我无法解决问题。我敢肯定这对某人来说是秒回答。

我在我的 htaccess 文件中进行了如下重写:

RewriteCond %{THE_REQUEST} \ /product\.php\?categoryfilename=([A-Za-z0-9-%.]+)&category=([A-Za-z0-9-%.]+)&id=([A-Za-z0-9-]+)
RewriteRule ^ /%3-P.html? [R=301,L]

重写工作 如果我输入:

www.mysite.co.uk/product.php?categoryfilename=all-products.php&category=All%20products&id=MY-PRODUCT

它重定向到:

http://www.mysite.co.uk/MY-PRODUCT-P.html

那么我有一个简单的重定向:

重定向 301 /MY-PRODUCT-P.html http://www.mysite.co.uk/MY-PRODUCT-123-P.html?

这应该是一个静态重定向,但它附加了一个讨厌的 ?到结果结束。

如果我删除 ?从重定向的末尾开始,我在第一个 rewriterule 中的原始混乱路径名中附加了 php 变量

非常感谢

【问题讨论】:

  • 请使用正确的术语。您正在从 /name-P.html 重写为 /product.php?var=val&var=val&var=val 等。客户看到的“外部世界”静态 URI 是 /name-P.html,而您的 PHP 的动态 URI代码看到是/product.php?...

标签: regex apache .htaccess mod-rewrite redirect


【解决方案1】:

您无法使用 Redirect 指令匹配或操作 QUERY_STRING。请改用 mod_rewrite。将此代码放入您的DOCUMENT_ROOT/.htaccess

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/product\.php\?categoryfilename=([^&]*)&category=([^&]*)&id=([^&\s]*)
RewriteRule ^ /%3-P.html? [R=301,L,NE]

RewriteRule ^(MY-PRODUCT)-(P\.html)$ /$1-123-$2? [L,NC,R=301]

【讨论】:

  • 嗨,我真的很抱歉。在我的问题中,我写了完全错误的代码行。我昨晚很晚才工作,今天早上很早就起床继续工作。怕是眼睛累了。正确的代码行现在在问题中!
  • 第一个重写是动态的。有一系列不同的可能性将全部重定向,然后 %3 将用于创建新的路径名。届时,某些产品将需要再次重定向,因为它们的名称略有变化。这就是为什么我添加了重定向 301 的第二步。所以我不能只修改第一个重写规则,因为这会弄乱重写后完全正常的所有产品。我的代码除了添加了这个事实之外,还可以完美运行?在redirect301之后到路径名的末尾...
猜你喜欢
  • 2012-02-16
  • 2019-08-12
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2015-01-13
  • 2011-05-10
相关资源
最近更新 更多