5

この path:/page(/:pageID)を考えると、次のバリエーションを許可するにはどうすればよいですか:

  • /pageおよび/page/(pageID 部分が欠落している場合でも。
  • /page/1/page/1/

ありがとうございました。

4

5 に答える 5

8

この方法でルートを定義する必要があります。

$app->get('/page(/:id/?)', function ($id = NULL) use ($app) {
    ; // your code
});
于 2012-09-13T16:24:19.447 に答える
4

@instによって提供された答えはここでは機能しません(XAMPPで実行されているSlim 2.0.0):/page/は404を出します。

ただし、これは4つのケースすべてで機能します。

$app->get('/page(/)(:id/?)', function ($id = NULL) use ($app) {
  echo 'success';
});
于 2012-12-14T17:25:10.590 に答える
2

ドキュメントに記載されているように、オプションのセグメントは使用状況によっては不安定になる場合があります。たとえば、Fabien Snauwaert による回答と次のルートを使用します。

/:コントローラー(/)(:アクション(/)(:オーバーフロー+/?))
/:コントローラー(/)(:アクション(/:オーバーフロー+/?))

すべての引数が満たされていない場合、param 値を取得すると、これらは右側の位置になり、 と にaction == controllerなりoverflow == actionます。

これを防ぐための簡単な解決策は、オプションのスラッシュをルートの最後に置くことです。

/:コントローラー(/:アクション(/:オーバーフロー+))/?
/:コントローラー(/:アクション(/:オーバーフロー+))(/)

そして、それはより読みやすいですね。

他の回答についてコメントすることはできないので、ここに Igor の回答に関する詳細を書きます。

このアプローチの「問題」の 1 つは、ユーザーが存在しないページにアクセスしようとし、末尾にスラッシュがある場合、301 リダイレクトで 404 ページが表示されることです。ちょっと変かも。

于 2013-04-10T19:07:31.770 に答える
1

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]
于 2013-03-30T21:11:34.377 に答える