Apache mod_rewrite使用PATH_INFO派生额外的重写子请求

Apache mod_rewrite使用PATH_INFO派生额外的重写子请求,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,假设我想将所有以/test/开头的请求路由到一个PHP文件info.PHP。我可以通过将原始的%{REQUEST_URI}传递为: 查询字符串参数,如中所示 info.php?request_uri=/test/some/path 或, PATH\u INFO-紧跟在INFO.php后面的路径字符串,如 info.php/test/some/path 还有其他方法(例如环境变量),但我的问题是关于使用PATH\u INFO时的奇怪行为 问题在于,根据重写日志,PATH\u INFO方法比查

假设我想将所有以
/test/
开头的请求路由到一个PHP文件
info.PHP
。我可以通过将原始的
%{REQUEST_URI}
传递为:

  • 查询字符串参数,如中所示

    info.php?request_uri=/test/some/path
    
    或,

  • PATH\u INFO
    -紧跟在
    INFO.php
    后面的路径字符串,如

    info.php/test/some/path
    
  • 还有其他方法(例如环境变量),但我的问题是关于使用
    PATH\u INFO
    时的奇怪行为

    问题在于,根据重写日志,
    PATH\u INFO
    方法比查询字符串方法多生成一个子请求

    有人能解释为什么会这样吗

    细节
    DOCUMENT\u ROOT
    位于
    /var/www
    。httpd-V的第一行是:

    Server version: Apache/2.2.15 (Unix)
    
    路径信息
    /var/www/test/.htaccess
    文件的内容如下:

    DirectoryIndex disabled
    DirectorySlash off
    Options +FollowSymLinks -MultiViews
    
    RewriteEngine on
    
    # Only perform the rewrite for first round of mod_rewrite processing.
    RewriteCond %{ENV:REDIRECT_STATUS} =""
    # Pass current path as PATH_INFO to PHP script.
    RewriteRule ^ info.php%{REQUEST_URI}
    
    /test/some/path
    的请求产生以下重写日志输出:

    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (4) [perdir /var/www/test/] RewriteCond: input='' pattern='=' => matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (2) [perdir /var/www/test/] rewrite 'some/path' -> 'info.php/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] add per-dir prefix: info.php/test/some/path -> /var/www/test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (2) [perdir /var/www/test/] strip document_root prefix: /var/www/test/info.php/test/some/path -> /test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (1) [perdir /var/www/test/] internal redirect with /test/info.php/test/some/path [INTERNAL REDIRECT]
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/info.php -> /var/www/test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/info.php/test/some/path -> info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] applying pattern '^' to uri 'info.php/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (1) [perdir /var/www/test/] pass through /var/www/test/info.php
    
    (The subrequest begins here)
    
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (1) [perdir /var/www/test/] pass through /var/www/test/some
    
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (4) [perdir /var/www/test/] RewriteCond: input='' pattern='=' => matched
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (2) [perdir /var/www/test/] rewrite 'some/path' -> 'info.php?request_uri=/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) split uri=info.php?request_uri=/test/some/path -> uri=info.php, args=request_uri=/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] add per-dir prefix: info.php -> /var/www/test/info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (2) [perdir /var/www/test/] strip document_root prefix: /var/www/test/info.php -> /test/info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (1) [perdir /var/www/test/] internal redirect with /test/info.php [INTERNAL REDIRECT]
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/info.php -> info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (3) [perdir /var/www/test/] applying pattern '^' to uri 'info.php'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (1) [perdir /var/www/test/] pass through /var/www/test/info.php
    
    查询字符串
    /var/www/test/.htaccess
    的最后一行更改为:

    RewriteRule ^ info.php?request_uri=%{REQUEST_URI}
    
    /test/some/path
    的请求产生以下重写日志输出:

    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (4) [perdir /var/www/test/] RewriteCond: input='' pattern='=' => matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (2) [perdir /var/www/test/] rewrite 'some/path' -> 'info.php/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (3) [perdir /var/www/test/] add per-dir prefix: info.php/test/some/path -> /var/www/test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (2) [perdir /var/www/test/] strip document_root prefix: /var/www/test/info.php/test/some/path -> /test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b5d888/initial] (1) [perdir /var/www/test/] internal redirect with /test/info.php/test/some/path [INTERNAL REDIRECT]
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/info.php -> /var/www/test/info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/info.php/test/some/path -> info.php/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (3) [perdir /var/www/test/] applying pattern '^' to uri 'info.php/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fd0/initial/redir#1] (1) [perdir /var/www/test/] pass through /var/www/test/info.php
    
    (The subrequest begins here)
    
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:46:22 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b4d818/subreq] (1) [perdir /var/www/test/] pass through /var/www/test/some
    
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] add path info postfix: /var/www/test/some -> /var/www/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/some/path -> some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] applying pattern '^' to uri 'some/path'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (4) [perdir /var/www/test/] RewriteCond: input='' pattern='=' => matched
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (2) [perdir /var/www/test/] rewrite 'some/path' -> 'info.php?request_uri=/test/some/path'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) split uri=info.php?request_uri=/test/some/path -> uri=info.php, args=request_uri=/test/some/path
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (3) [perdir /var/www/test/] add per-dir prefix: info.php -> /var/www/test/info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (2) [perdir /var/www/test/] strip document_root prefix: /var/www/test/info.php -> /test/info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b56858/initial] (1) [perdir /var/www/test/] internal redirect with /test/info.php [INTERNAL REDIRECT]
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (3) [perdir /var/www/test/] strip per-dir prefix: /var/www/test/info.php -> info.php
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (3) [perdir /var/www/test/] applying pattern '^' to uri 'info.php'
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (4) [perdir /var/www/test/] RewriteCond: input='200' pattern='=' => not-matched
    127.0.0.1 - - [02/Feb/2015:19:49:07 --0500] [localhost/sid#7f5a056a9880][rid#7f5a05b54fe0/initial/redir#1] (1) [perdir /var/www/test/] pass through /var/www/test/info.php
    
    如您所见,此重写日志输出中未显示任何子请求