3

パラメータでユーザーリファラーを取得しrます。( r:code)。

すべての:controller/:action/*ページで問題なく動作しますが、ベース パス (/) に渡そうとすると、Web サーバーがエラー 403 を返します。

これが私のroutes.phpファイルです:

    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
    Router::connectNamed(array('r' => '[\d]{4}'));

これらの URL はうまく機能します。

http://example.com/pages/home/r:1234
http://example.com/apples/eat/r:1234

しかし、それは機能しません:

http://example.com/r:1234

どうしたの?

質問: URL からリファラー コードを取得する方法ですか? または、渡された引数を使用する方が良いですか? ( http://example.com/1234/controller/action/.......)

4

2 に答える 2

2

Apache 2.2では、実際にはAPRtest_safe_name()関数は、Windowsサーバー上のURI内でこの種の「:」文字を意図的に禁止しています。これは基本的にhttp://www.mysite.com/C:/SomeFile.exeのようなURLを回避するためのものですが、実際には煩わしいためです。また、 「:」文字を使用してデータストリームアクセスを試みる名前 の代わりに、WindowsFindFirstFile()関数が返されます。MediaWikiの名前空間区切り文字として「:」文字を選択したのは、Windowsサーバーで使用するには残念なことでした。ERROR_INVALID_NAMEERROR_FILE_NOT_FOUND

于 2013-02-13T22:43:55.780 に答える
1

get引数を使用する

get引数を使用すると、コードははるかに堅牢になります。

/?r=urlencodedurl

これはルートに依存しないため、使用するURLに関係なく、破損したり問題が発生したりすることはありません。リクエストオブジェクトを介してgetargsにアクセスします。

$r = $this->request->query['r']
于 2013-02-13T22:44:52.537 に答える