0

一部のユーザーが次の URL 形式を使用してサイトにアクセスしようとしていることがログに表示されます。

http://mysite.com//home/article/123

(ドメインの後の二重スラッシュに注意してください)。これらに、対応する「単一のスラッシュ」URL のアクションを実行させたいと考えています。そこで、次のようなルートを追加してみました:

Router::connect('//home/article/:id/*', array(
    'controller'=>'article',
    'action'=>'view'),
    array('pass' => array('id'),
    'id' => '[0-9]+',
));

しかし、私はこのエラーが発生します:

Error: [MissingPluginException] Plugin  could not be found.

これらの書き換えルールでも試しました:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

しかし、URLは変更されず、同じエラーが発生しました。

なぜこれが間違っているのですか?Cakephp ルーティング (または Apache RewriteRule) に追加する必要があるルールは何ですか?

4

3 に答える 3

0

これは、.htaccessの書き換えルールを使用して行う必要があります。ただし、使用している書き換えでは、ドメイン名と最初のスラッシュの後の二重スラッシュのみが削除されるため、問題は修正されません。

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

このルールは、URLの次の部分でのみ機能します。

ホーム/記事/123

だからそれはこれを修正します:

http://www.example.com/home//articles/123

しかし、これではありません:

http://www.example.com//home/articles/123

両方のケースを修正する必要がある場合は、代わりにこのルールを追加するか、他のルールと同様に追加する必要があります。

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
于 2013-01-02T12:46:52.110 に答える
0

ルーターはリダイレクトせず、URL をコントローラー アクションにマップするだけです。削除する場合//は、Web サーバーの書き換えで行います。

于 2013-01-01T09:25:22.650 に答える