2

Catalystアプリケーションを開発していますが、 CatalystURLの解釈方法に問題があります。

CatalystアプリケーションにコントローラーがあるとしましょうAccount。この場合、Catalystは解釈します

http://mydomain.com/accounthttp://mydomain.com/account/

インデックスアクション の同じURLとして。

ただし、SEOとリンクの目的で(そして全体的に一貫性を保つために)、Catalystに1つの形式のみを認識させ、それに固執させたいと思います。

このために構築されているように見えるモジュールを1つ見つけました:Catalyst :: Plugin :: SanitizeUrl、ドキュメントには、

Catalyst'SanitizeUrl'を使用します;

myapp.pm、これはあなたのためにすべてを処理します。

ただし、使用するたびに次のエラーが発生します。

Bad request

ページの読み込みごと。Catalystに1つのフォーマットのみを使用させる簡単な方法を知っている人はいますか?

4

3 に答える 3

1

末尾にスラッシュを付けずにCatalystに1つの形式のみを使用させる簡単な方法は、次のメソッドをMyApp.pmに追加することです。

sub begin :Private {
    my ($self, $c) = @_;
    my @path = split "/", $c->req->path, -1;
    $c->detach('default') if @path and (pop @path eq '');
}

uriがリクエストでスラッシュで終了した場合、「デフォルト」メソッド(別名ページ404)にリダイレクトされます。

于 2013-02-08T16:15:56.407 に答える
0

末尾が存在するかどうかに応じて、URLを別のアクションメソッドに転送できると思います/。それで、

sub index :Path :Args(0) { 
    my ($self,$c) = @_;
    my $path = $c->request->path;
    my $matched = $path =~ s/(\/)$//;
    if ($matched) {
          $c->forward('withslash');
    }
    else {
          $c->forward('withoutslash');
    }
}

繰り返しますが、これは未解決の解決策であり、確認する必要があるかもしれません。

于 2013-02-07T06:15:56.070 に答える
0

私はedemが言ったことを私がしたいくつかのことと組み合わせることになりました、そしてこれは私の最終結果です:

sub begin :Private {
    my ($self, $c) = @_;

    #don't allow trailing slashes!
    my @path = split "/", $c->req->path, -1;
    if(@path and (pop @path eq '')) {
        my $p = join '/', @path;
        #set as moved permanently
        $c->res->redirect("/$p", 301);
        return;
    }
}

リクエストの最後にスラッシュがある場合、スラッシュなしで常に同じURLにリダイレクトされます。

于 2013-05-25T00:12:01.230 に答える