1

トロのドキュメントは次のように示しています。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]

しかし、私は何度もさまざまな方法を試しましたが、うまくいきません...何度も検索した後、これを見つけました( source ):

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php?$1 [L]

これを取得するにはRewriteRule ^(.*)$ /index.php/$1 [L]/toを変更するだけです?RewriteRule ^(.*)$ /index.php?$1 [L]

オリジナルが機能しない理由を知っている人、またはこれに対して別のアプローチを持っている人はいますか?

詳細情報 ホスト: php5.4 fastcgi、共有ホスト、Dreamhost 社。PATH_INFO の代わりに SCRIPT_NAME を受け入れるだけです

それを処理する Toro コードは次のとおりです。

$path_info = '/';
        if (!empty($_SERVER['PATH_INFO'])) {
            $path_info = $_SERVER['PATH_INFO'];
        }
        else if (!empty($_SERVER['ORIG_PATH_INFO']) && $_SERVER['ORIG_PATH_INFO'] !== '/index.php') {
            $path_info = $_SERVER['ORIG_PATH_INFO'];
        }
        else {
            if (!empty($_SERVER['REQUEST_URI'])) {
         $path_info = (strpos($_SERVER['REQUEST_URI'], '?') > 0) ? strstr($_SERVER['REQUEST_URI'], '?', true) : $_SERVER['REQUEST_URI'];
                }
        }
4

2 に答える 2

1

これは、応答を生成するスクリプトへのパスに URL をマッピングすることに関するものです。

Apache は、URL、特にそのパスとクエリ文字列部分を含む HTTP リクエストを取得します。Mod_rewrite は、サーバー構成のルールを使用して URL を書き換えます (複数のファイル: apache2.conf、httpd.conf、仮想ホスト構成、.htaccess など)。次に、Apache はそれを最初の疑問符で分割し、パス部分をファイルシステム パスとして解釈します (先頭に DocumentRoot を追加)。ファイルが存在しない場合、通常は 404 Not Found 応答が生成されます。画像やHTML文書の場合はそのまま送信されます。スクリプトの場合は実行され、リクエストからクエリ文字列やその他の情報を取得します。

Apache は非常にモジュール化されており、構成可能であるため、具体的には言えません。特にスクリプトの実行は非常に複雑なトピックです。Apache の作業の一般的な部分は、リクエストの解析 → URL からファイルシステム パスへのマッピング → レスポンスの生成です。

クライアントに表示される URL にクエスチョン マークがまったく含まれていなくても、スクリプトを実行して URL から追加情報を得ることができます。これを行う 1 つの方法は、mod_rewrite と .htaccess を使用して URL を書き換えることです。. Jon Lin が既に書いたように、AcceptPathInfo は別のオプションです。それらのいずれかがあなたのニーズに対して明らかに良いか悪いかはわかりません. 大規模なサーバーで使用すると、パフォーマンスが問題になる可能性がありますが、そうではありません。

于 2013-09-19T16:41:05.670 に答える