Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess规则在文件不存在时重定向_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php .htaccess规则在文件不存在时重定向

Php .htaccess规则在文件不存在时重定向,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,应用程序驻留在此处: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 cas

应用程序驻留在此处:
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 [查询字符串]=> [请求\u URI]=>/reports/daily\u stats/br [SCRIPT_NAME]=>/reports/index.php [路径信息]=>/每日统计信息/br [PATH\u TRANSLATED]=>/var/www/daily\u 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

听起来你已经为案例1制定了规则。。。但是当URL不以“daily_stats”结尾时,您需要阻止规则的应用。为此,只需在匹配字符串的末尾添加一个
$
。像这样的方法应该会奏效:

RewriteRule ^reports/daily_stats/?$ /reports/daily_stats.php

这将引导您走上正确的道路:
errordocument404/404.php有什么问题吗?
?您是否启用了重新写入日志,如果启用了,它会说什么?