0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.htaccessで日本語パラメーター付きURLのリダイレクト

Posted at

要件

サーバー側で、日本語のパラメーターが付いた以下のようなパス
/example/index.html?param1=元のパラメーター&param2=example.....
を、param1のみ別のパラメーターに変換しそれ以外は引き継いだ状態でリダイレクトする。

設定内容

.htaccess
RewriteEngine on

RewriteCond %{QUERY_STRING} (^|&)param1=%E5%85%83%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC(&|$)
RewriteCond %{QUERY_STRING} (.*?)&?param1=%E5%85%83%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC&?(.*)
RewriteRule ^example/index\.html /example/index.html?param1=リダイレクト先のパラメーター&%1&%2 [NE,R=301,L,QSD]

解説

RewriteCond %{QUERY_STRING} (^|&)param1=%E5%85%83%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC(&|$)
リダイレクト対象となるパラメーターの条件を記載します。
他にパラメーターが存在する場合は、前後にある別のパラメーターを存在しても問題無いように記述します。
上記は前後どちらにも存在する例です。

RewriteCond %{QUERY_STRING} (.*?)&?param1=%E5%85%83%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC&?(.*)
前後に存在しているパラメーターをそのまま取得します。
同じく前後どちらにも存在する例です。

RewriteRule ^example/index\.html /example/index.html?param1=リダイレクト先のパラメーター&%1&%2 [NE,R=301,L]
リダイレクトの詳細を記載します。
リダイレクト後のパスにはリダイレクト先パラメーターと、先程取得したその他のパラメーターを&%1&%2のように結合します。

上手く動作しない場合

  • .htaccessファイルの文字コードやサーバーの文字コード設定(AddDefaultCharsetなど)がUTF-8に統一されているかを念のため確認して下さい
    (特に日本語を扱う場合はUTF-8が必須となります。)
  • URLエンコードが正しいか確認してください
  • リダイレクト先にURLエンコード済の文字列を記述する場合、%を全てエスケープして記載してください
    例:%E5%85%88 ⇒ \%E5\%85\%88
  • NEオプションが付与されているか確認して下さい

補足

遷移先のパラメーターはURLエンコード済の状態では勿論ですが、日本語でも一応記述可能です。
RewriteCondの方は文字コードや設定が合っていれば問題ないと思うのですが、調べている過程でこちらも%にエスケープ処理を施さないと動作しない旨の記事が幾つもあり、もしかすると環境によるのかもしれません…。
(どなたか分かる方がいましたら教えて下さい。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?