查询字符串:多次替换相同的文本

时间:2014-07-17 08:32:34

标签: regex .htaccess replace query-string dokuwiki

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

网址如下:

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

问题: 我应该将字符串producta替换为productb。该字符串可以在URL中多次出现。因此,无论出现的次数如何,都应予以更换。

我找到了几种替换唯一字符串的方法。但我需要在URL中替换此字符串的每个出现。可以在问号之前进行替换,但我没有找到像这样操纵查询字符串的解决方案。

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

1 个答案:

答案 0 :(得分:1)

这很棘手,但可以做到。尝试将其添加到您的网络文档根文件夹中的.htaccess文件中(通常为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();输出中已安装模块的列表 默认情况下,{_ 1}}文件未启用mod_rewrite。如果您要管理自己的服务器,请打开.htaccess 并确保webroot目录块包含以下行之一:httpd.confAllowOverride FileInfo