0

アプリケーションは次の場所にあります。http://localhost/reports/

  • レポート
    • index.php
    • Daily_stats.php
    • コントローラー
      • Daily_stats.php //アクションとして br() を持つコントローラーです

次のケースに従って .htaccess ルールを書きたいと思います。

case1: http://localhost/reports/daily_stats/  
           resulting url: http://localhost/reports/daily_stats.php

case2: http://localhost/reports/daily_stats/br/  
           resulting url: http://localhost/reports/index.php/daily_stats/br

index.php がコントローラへのルーティングを処理する場所

私は次のように書いています:

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

直面する問題は、入力http://localhost/reports/daily_stats/br/ すると、コントローラーではなくルートフォルダーで Daily_stats.php が実行されることです

サーバー変数を見ると、次のようになります。

[SCRIPT_FILENAME] => /var/www/reports/daily_stats.php
[QUERY_STRING] => 
[REQUEST_URI] => /reports/daily_stats/br
[SCRIPT_NAME] => /reports/daily_stats.php
[PATH_INFO] => /br
[PATH_TRANSLATED] => /var/www/br
[PHP_SELF] => /reports/daily_stats.php/br

[SCRIPT_FILENAME] => /var/www/reports/index.php [QUERY_STRING] => [REQUEST_URI] => /reports/daily_stats/br [SCRIPT_NAME] => /reports/index.php [PATH_INFO] => /daily_stats/br [PATH_TRANSLATED] => /var/www/daily_stats/br [PHP_SELF] => /reports/index.php/daily_stats/br

書き換えログには次のように書かれています:

127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6ae6058/subreq] (3) [perdir /var/www/reports/] add path info postfix: /var/www/reports/daily_stats.php -> /var/www/reports/daily_stats.php/br
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6ae6058/subreq] (3) [perdir /var/www/reports/] strip per-dir prefix: /var/www/reports/daily_stats.php/br -> daily_stats.php/br
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6ae6058/subreq] (3) [perdir /var/www/reports/] applying pattern '^(.*)$' to uri 'daily_stats.php/br'
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6ae6058/subreq] (4) [perdir /var/www/reports/] RewriteCond: input='/var/www/reports/daily_stats.php' pattern='!-f' => not-matched
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6ae6058/subreq] (1) [perdir /var/www/reports/] pass through /var/www/reports/daily_stats.php
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6af0058/initial] (3) [perdir /var/www/reports/] add path info postfix: /var/www/reports/daily_stats.php -> /var/www/reports/daily_stats.php/br
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6af0058/initial] (3) [perdir /var/www/reports/] strip per-dir prefix: /var/www/reports/daily_stats.php/br -> daily_stats.php/br
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6af0058/initial] (3) [perdir /var/www/reports/] applying pattern '^(.*)$' to uri 'daily_stats.php/br'
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6af0058/initial] (4) [perdir /var/www/reports/] RewriteCond: input='/var/www/reports/daily_stats.php' pattern='!-f' => not-matched
127.0.0.1 - - [07/Aug/2012:15:22:30 +051800] [localhost/sid#b63fead8][rid#b6af0058/initial] (1) [perdir /var/www/reports/] pass through /var/www/reports/daily_stats.php
4

1 に答える 1

0

既に case1 のルールを作成しているようですが、URL が「daily_stats」で終わらない場合にルールが適用されないようにする必要があります。これを行うに$は、一致文字列の末尾に を追加するだけです。このようなものが動作するはずです:

RewriteRule ^reports/daily_stats/?$ /reports/daily_stats.php
于 2012-10-19T14:06:17.380 に答える