この path:/page(/:pageID)
を考えると、次のバリエーションを許可するにはどうすればよいですか:
/page
および/page/
(pageID 部分が欠落している場合でも。/page/1
と/page/1/
ありがとうございました。
この方法でルートを定義する必要があります。
$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
; // your code
});
@instによって提供された答えはここでは機能しません(XAMPPで実行されているSlim 2.0.0):/page/は404を出します。
ただし、これは4つのケースすべてで機能します。
$app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
echo 'success';
});
ドキュメントに記載されているように、オプションのセグメントは使用状況によっては不安定になる場合があります。たとえば、Fabien Snauwaert による回答と次のルートを使用します。
/:コントローラー(/)(:アクション(/)(:オーバーフロー+/?)) /:コントローラー(/)(:アクション(/:オーバーフロー+/?))
すべての引数が満たされていない場合、param 値を取得すると、これらは右側の位置になり、 と にaction == controller
なりoverflow == action
ます。
これを防ぐための簡単な解決策は、オプションのスラッシュをルートの最後に置くことです。
/:コントローラー(/:アクション(/:オーバーフロー+))/? /:コントローラー(/:アクション(/:オーバーフロー+))(/)
そして、それはより読みやすいですね。
他の回答についてコメントすることはできないので、ここに Igor の回答に関する詳細を書きます。
このアプローチの「問題」の 1 つは、ユーザーが存在しないページにアクセスしようとし、末尾にスラッシュがある場合、301 リダイレクトで 404 ページが表示されることです。ちょっと変かも。
Apache mod_rewrite を有効にしてこれを達成する方法を見つけました。のスニペット.htaccess
RewriteEngine On
# remove trailing slash
RewriteCond %{HTTPS} off
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule ^(.+[^/])/$ https://%{HTTP_HOST}/$1 [R=301,L]