■実現したいこと（概要）：  
クエリパラメター無しのURLにアクセスしたら、自動的にクエリパラメタを付加したURLに飛ばしたい。

■実現したいこと（詳細）：  
１．現在、クエリパラメターを使って、DB連携で表示させるようなプログラムを  
作成している。

２．具体的には、  
http://◎◎◎.php?lan=en

であり、この場合、

◎◎◎.phpのプログラムの中で、

DBから、「lan=en、即ち言語がenglish」のものを抽出して、  
表示させています。

３．当然のことながら、  
単純に、クエリパラメター無しの  
http://◎◎◎.phpにアクセスした場合には、  
正常な表示がなされません。

４．やりたいこと：

具体的には、  
http://◎◎◎.phpへのアクセスがあった場合に、

自動的に、  
http://◎◎◎.php&lan=en  
  
という具合に、クエリパラメターを付加して表示させたい。  
.htaccessへ記載すればいいのでしょうか？

（追加の質問）  
・.htaccessに記載する方法の場合、SEO対策的には有効な方法と考えられるの  
でしょうか？  
  
以上、よろしくお願いいたします。
CC BY-SA 4.0
2018-07-09T00:48:32.943
45435
2019-09-09T08:13:44.523
2018-07-09T06:57:37.933
5008
16826
question
php mysql apache .htaccess
クエリパラメター無しのURLにアクセスしたら、自動的にクエリパラメタを付加したURLに飛ばしたい。
解決しました！  
.htaccessファイルを使うことはせず、isset関数を使うことで解決しました

■結論  
phpファイルの最初の行で以下のように記載。

```

    <?php 
    $lan = isset($_GET['lan']) ? $_GET['lan'] : 'en';
    ?>
    
```

■コードの説明  
・isset関数を使うことによってクエリパラメターチェック  
・三項演算子を使ってすっきりしたコードに

■PHP動作の流れ  
◎パターン１  
`http://example.com/XXX.php?lan=en`

でアクセスされた場合は、isset関数を使うことによってクエリパラメターをチェックし、`$_GET['lan']`があるので、`$lan＝$_GET['lan']`として処理が進む。  
つまり、これまで通り`http://example.com/XXX.php?lan=en`のURLとして表示

◎パターン２

`http://example.com/XXX.php`  
でアクセスされた場合は、isset関数を使うことによって、クエリパラメターをチェックし、`$_GET['lan']`がないので、内部的に、`$lan＝'en';`として値を代入

この場合、URLとして表示されるのは`http://example.com/XXX.php`ですが、  
内部的には、`http://example.com/XXX.php?lan=en`にアクセスされた場合と同じ処理

* * *

この投稿は [@きむちゃん
さんのコメント](https://ja.stackoverflow.com/questions/45435/%e3%82%af%e3%82%a8%e3%83%aa%e3%83%91%e3%83%a9%e3%83%a1%e3%82%bf%e3%83%bc%e7%84%a1%e3%81%97%e3%81%aeurl%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%97%e3%81%9f%e3%82%89-%e8%87%aa%e5%8b%95%e7%9a%84%e3%81%ab%e3%82%af%e3%82%a8%e3%83%aa%e3%83%91%e3%83%a9%e3%83%a1%e3%82%bf%e3%82%92%e4%bb%98%e5%8a%a0%e3%81%97%e3%81%9furl%e3%81%ab%e9%a3%9b%e3%81%b0%e3%81%97%e3%81%9f%e3%81%84#comment47570_45435)
を元にコミュニティwikiとして投稿しました。
CC BY-SA 4.0
2019-09-09T08:13:44.523
57948
2019-09-09T08:13:44.523
3060
45435
answer