1

背景:我最近在 DokuWiki 安装中将包含特定产品名称的每个字符串更改为另一个。现在我必须将硬编码的链接重定向到新的 URL。

URL 如下所示:

past:    example.com/wiki/doku.php?id=sales:producta:descr:producta
present: example.com/wiki/doku.php?id=sales:productb:descr:productb

问题:我应该将字符串替换productaproductb. 该字符串可以在 URL 中出现多次。因此,无论出现多少次,都应该更换它。

我找到了几种替换唯一字符串的方法。但我需要替换 URL 中该字符串的每一次出现。问号之前的有效替换是可能的,但我没有找到像这样操作查询字符串的解决方案。

有没有办法实现这种替换?

4

1 回答 1

1

这很棘手,但可以做到。尝试将此添加到.htaccess您的 Web 文档根文件夹中的文件中(通常是public_htmlhtdocs):

Options -Multiviews
RewriteEngine On
# If the query string contains producta, capture it to %1
RewriteCond %{QUERY_STRING} ^(.+?producta.*)
# ... and bring it down to the url, temporarily inserting @@
RewriteRule ^(.+) $1@@%1? [DPI]
# Rewrite product a to product b but only if @@ is in the string
RewriteRule ^([^@]+@@.*)producta(.*) $1productb$2 [N] 
# Remove @@
RewriteRule ^([^@]+)@@(.*) $1?$2 [L]

假设 mod_rewrite 已安装.htaccess为文件激活。如果您不确定,要检查是否安装了 mod_rewrite,请查看phpinfo(); 默认情况下未为.htaccess文件启用 mod_rewrite 的输出中的已安装模块列表。如果您正在管理自己的服务器,请打开httpd.conf 并确保 webroot 目录块包含以下行之一:AllowOverride FileInfoAllowOverride All

于 2014-07-17T09:31:47.963 回答