26966


キーワード検索機能を持つブログで、検索結果の2ページ目にキーワードを引き継ぐためにGETを用いて「?s=キーワード&page=ページ」の形にしています。  
実際にはマルチバイト文字はエスケープされるので「あ」は「%E3%81%82」に置き換えられて次のようになっています。

[code]

    http://example.com/blog/?s=%E3%81%82&amp;page=2
    
[/code]

しかし、そのリンクにアクセスしてみるとすぐにリダイレクトされて下記のアドレスに転送されます。「%」が「%25」に置き換えられてしまっています。

[code]

    http://example.com/blog?s=%25E3%2581%2582&page=2
    
[/code]

転送の原因は末尾のスラッシュを消すための処理を.htaccessに記述しているせいです。

[code]

    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
[/code]

この処理をなくすか、URLを「〜blog/?s=」の代わりに「〜blog?s=」となるようにリンクを作成するとリダイレクトは発生しないので正しいURLにアクセスすることができます。  
しかし、使用しているフレームワーク(Laravel 5.0)のページネーション機能 render() で出力すると不要な末尾の「/」が付加されてしまいます。

・Laravel のビュー部分

[code]

    {!! $posts->render() !!}
    
[/code]

理想はフレームワーク側で末尾にスラッシュを付けずに render() によるページナビ出力をしたいのですが、.htaccess
側で対処できるのであればそれでも構いません。  
リダイレクト時にGETパラメータを正しく保持したままにするにはどうすれば良いのでしょうか？


CC BY-SA 3.0
2015-10-22T09:46:58.607
17951
2016-06-23T00:44:31.213
10083
question
php apache laravel
.htaccessでのリダイレクト時にURLが二重にパーセントエンコードされてしまう


[argusさんのコメント](https://ja.stackoverflow.com/questions/17951/htaccess%E3%81%A7%E3%81%AE%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E6%99%82%E3%81%ABurl%E3%81%8C%E4%BA%8C%E9%87%8D%E3%81%AB%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86#comment16584_17951)より。

> `RewriteRule ^(.*)/$ /$1 [L,NE,R=301]` としてみて下さい(`NE` を追加)。`NE` は `No Escape`
> の意味です。

関連: [RewriteRule Flags - Apache HTTP Server Version
2.4](https://httpd.apache.org/docs/current/rewrite/flags.html#flag_ne)


CC BY-SA 3.0
2016-06-23T00:44:31.213
26966
2016-06-23T00:44:31.213
2017-04-13T12:52:39.113
-1
8000
17951
answer