

検索結果ページのURLを

`http://example.com/?search=検索文字列`

のパラメータ形式から

`http://example.com/search/検索文字列`

こちらの形式にしたい、と先方より要望がありました。

先方の要望は聞いてあげたいと思いjavascriptとPHPで実装をしてみましたが、とても違和感を覚えたため（ダサい気がして）断ろうと考えはじめました。  
色々調査を進めていましたが、「違和感」以外の断る理由が見いだせません。

[code]

    $('#form').on('click', function(e){
        // submitをキャンセル
        e.preventDefault();
    
        // 文字列を取得してurl作成
        var url = 'http://example.com/search/'+$('#search').val();
        // 遷移先のurlにパラメータ形式で値が入ってしまうのを防いだ
        $('#search').val('');
        // submitするのではなく、リダイレクト
        location.href = url;
    });
    // 内容は抽象化しています。
    
[/code]

私が覚えた違和感は主に下記です。

  1. フォームの入力からサブミットすれば良いものの、リダイレクトしている点
  2. フォームのaction属性から取得すれば良いものの、いちいち遷移先URLを作成している点

むしろ、これで問題無い、との判断が出来るのであればこのような方向で進めることも出来るため、みなさんの意見や知識を伺いたいと思っています。

よろしくお願いいたします。


CC BY-SA 3.0
2016-07-07T08:10:57.787
27412
2017-01-14T03:58:02.720
2016-07-07T09:01:16.327
8000
17094
question
javascript php html
GETでフォーム送信すると ?search=xxx というURLになるところを /search/xxx にしたい


URLの変更をプログラムで対応するのではなく、apacheやnginx側で対応すれば、プログラムはダサくない状態で、かつ要望も叶えられます。環境が書かれてないので具体的には書けませんが、apache
なら mod_rewrite を有効にして次のような設定を書けばいいと思います。

[code]

    RewriteRule ^/search/(.*) /?search=$1
    
[/code]


CC BY-SA 3.0
2016-07-07T11:48:55.033
27433
2016-07-07T11:48:55.033
5008
27412
answer


なんとなく思いつきで試してみた。  
ローカルでやってみたらIE11とFirefox50.1.0は行けるっぽい。  
他は検証してません。

[code]

    <form method="get"
          action="http://example.com/serch/"
          onsubmit="this.action=this.action+document.getElementById('serch_text').value;"
          >
     <p><input type="serch" id="serch_text" /></p>
     <p><button type="submit">Submit</button></p>
    </form>
[/code]


CC BY-SA 3.0
2017-01-14T03:58:02.720
31835
2017-01-14T03:58:02.720
19995
27412
answer