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

producta問題: 文字列を に置き換える必要がありますproductb。この文字列は、URL 内で数回発生する可能性があります。したがって、発生回数に関係なく交換する必要があります。

一意の文字列を置き換える方法がいくつか見つかりました。しかし、URL 内のこの文字列をすべて置き換える必要があります。クエスチョン マークの前に機能する置換は可能ですが、このようにクエリ文字列を操作する解決策は見つかりませんでした。

この交換を達成する方法はありますか?

4

1 に答える 1

1

それはかなりトリッキーですが、それは行うことができます。.htaccessこれをWeb ドキュメントのルート フォルダー内のファイルに追加してみてください(多くの場合public_htmlまたはhtdocs):

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 がインストールされファイルに対してアクティブ化されいることを前提としています。 よくわからない場合は、mod_rewrite がインストールされているかどうかを確認するために、デフォルトでファイルに対して mod_rewrite が有効になっていないの出力で、インストールされているモジュールのリストを見てください。独自のサーバーを管理している場合は 、webroot ディレクトリ ブロックを開いて、次のいずれかの行が含まれていることを確認してください。.htaccessphpinfo();.htaccesshttpd.confAllowOverride FileInfoAllowOverride All

于 2014-07-17T09:31:47.963 に答える