トップページ > 記事閲覧
【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/19(Tue) 22:30
投稿者 Yujiro
参照先
.htaccessに301リダイレクトを書くとき、転送先にHAIKの管理メニュー「このペ
ージの共有」からURLをコピーしたURLを使うと、余計なエンコードが入り、まと
もな日本語つきURLに変換されない。・・・リダイレクトのタイミングによってこ
れが起こるらしいです。

その結果、「現在、指定されたページは存在しません。
お手数ですが、ここをクリックしてトップにお戻り下さい。」

の表示となります。

(リダイレクトのタイミングによってはうまく行くようなので始末が悪いです)

何かシンプルですぐやれそうな対応策はないでしょうか。

==
先に書いた質問がちょっと冗長だったので書き直しました。

なお、301リダイレクト先に短縮URLを使うと正常にアクセスしますが、
canonicalが絡んでなんとなくイヤなんですよね。

妥協した方がいいのかなあ。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/21(Thu) 10:37
投稿者 Yujiro
参照先
スレッド閉じ報告

解決とさせていただきます。

結論として、ヒョウタンから駒的にわかったこと。

日本語を含んだURLを、.htaccsess の RewriteRule に301リダイレクトとして記
述して期待する反応を得ることができる。

環境:Xserver、 htaccsessnの記述はUTF-8

ただし、他の場面でURLの日本語部分をPunycode変換されたものが必要になると
も限りません。

なお、キャッシュが絡んで間違った結果を見ている可能性もあるので注意です。

アドバイスいただきました皆様に重ねてお礼を申し上げます。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 22:26
投稿者 stage2
参照先
解決されたようでよかったです^^
なるほど。
僕はRewriteRuleではまとめて転送することが多くNEフラグにお世話になってましたが、Yujiroさんのようにページそれぞれで記述する場合は日本語そのままが確実ですね。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 16:15
投稿者 Yujiro
参照先
解決しました! (そしてお騒がせしました)

ほとんど斜めの方向からのアプローチ。

環境:Xserver
htaccessの保存文字コード:UTF-8

日本語付きURLへの301リダイレクト記述は以下の通り。

RewriteRule ^old.html$ https://example.com/index.php?日本語のほにゃらら [R=301,L]

全くなんのことはありません・・・日本語部分含んでそのままコピペです。

.htaccessへのURL記述は日本語部分をPunycode変換されたものを使わなければな
らない、と言う先入観が邪魔を。なんでそう思ったのか定かではありませんが。

この作業を始めた当初、途中で日本語ままをURLに使う実験をしていたと思うので
すが、何か他の部分の記述間違いがあったのか、成功しなかったと思っていたので
す。

しかし以下のページのデータを参考に実験したところ100%正常稼働のようです。
変換×変換で元に戻る感じ。

http://algorhythnn.jp/blg/url-redirect/jp-url-redirect/mod_rewrite/

ただ、私が使っている環境も影響ありかも知れません。
同じような作業の必要がある方は十分に検証してください。

なお、お世話になりましたstage2さん案は真っ当な正統派だと思います。
そしてアドバイスいただきましたradishさんもありがとうございます。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 11:59
投稿者 Yujiro
参照先
radishさん
stage2さん

本当にありがとうございます。

私自身、RewriteRuleで使用するフラグの書き方についてもう少し勉強し、検証し
てからまた報告いたします。

リダイレクトしたいページ数そのまま、数行に渡ってR=301なので、このあた
り、正しい記述があると思えます。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 10:36
投稿者 Yujiro
参照先
radish さん

はい、キャッシュのクリアしてます。

念を入れて今までそこにアクセスしたことない別のブラウザまで立ち上げて試したり。

うまく行った時のキャッシュも残っていることがあり、間をおくとダメになると言う
経験もありますので。

それと、時折は「正しいwiki云々ではありません」的な表示になることも。
なんとなく、サーバー側にもなんらかのキャッシュがありげな。

この問題に気づかなかった当初、元の記述でうまく行っていた瞬間に遭遇したのがアダ。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 09:44
投稿者 radish
参照先
NE記述後にブラウザのキャッシュのクリアは試されましたか?

「現在、指定されたページは存在しません。
お手数ですが、ここをクリックしてトップにお戻り下さい。」

のページのキャッシュが残っていると、NE記述後でもうまくリダイレクトしないことがあるようです。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 02:20
投稿者 Yujiro
参照先
stage2さん

残念! 

RewriteRule (中略) [NE,L,R=301]

これでうまく行くときと行かないときが無秩序に起こります。

できた!と思ったのはたまたまうまく行った時のようです。

何か条件があるのだろうか?

ぼちぼち短縮URLの使用で妥協するときが来たかもです。
そうでなければ、元のhtmlファイル毎にエンコードされたURLを301しとくか。
↑これで行けるのか?未確認。
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 01:38
投稿者 Yujiro
参照先
stage2さん

おお!なんと素晴らしい。 超シンプル! そーかー!!

> %3F のような文字列をエンコードしないようにしてくれます。

↑ これこれ!

できました!

ApacheとかRewriteEngine、エンコードなんて、コンテンツを書くこと以外の勉
強しなくてはならないかなーとか思っていた矢先、専門分野に強い方からお助けを
いただきました!

ネットを叩いて小手先の検索では応用できる回答が見つからず・・

本当にありがとうございます!感謝感激、涙が出ます。

「301リダイレクトで元は日本語含みのURLに飛ばす」これって今は不要でも、あ
る日必要になることが・・・

これは覚えておくべし!
Re: 【質問】301リダイレクトで不要なエンコードが入る時の対処
投稿日 : 2017/12/20(Wed) 00:58
投稿者 stage2
参照先
RewriteEngine を使っていますよね?
NEフラグを使ってみてください。
ざっくりと書きますが、こんな感じです。

...
RewriteRule (中略) [NE,L,R=301]
...

NE は No Escape の略で、QHMの日本語ページ名につきものの %3F のような文字列をエンコードしないようにしてくれます。

- WEB PATIO -