在使用时候时候出现了一个问题,请求其他的地址,比如 http://localhost/a/b/c 可以获得结果
array (size=4) 0 => string '' (length=0) 1 => string 'a' (length=1) 2 => string 'b' (length=1) 3 => string 'c' (length=1)
但是如果是 http://localhost/index 就会提示404错误,这是为什么啊
index.php大概是这样
<?php
........
function analysisUri() {
var_dump(explode('/', $_SERVER['REQUEST_URI']));
}
echo $_SERVER['REQUEST_URI'];
analysisUri();
........virtualhost配置是这样
这个rewrite规则是从网上找到的
DocumentRoot /home/wwwOptions FollowSymLinks AllowOverride None #AllowOverride All <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / #不显示index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] #RewriteRule ^(.*)$ index.php?$1 [QSA,L] <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm
回复内容:
我想用 Apache 的 rewrite 在 php 中实现单一入口,把所有的请求都重定向到 index.php,然后分析 $_SERVER['REQUEST_URI'],构建路由功能。
在使用时候时候出现了一个问题,请求其他的地址,比如 http://localhost/a/b/c 可以获得结果
array (size=4) 0 => string '' (length=0) 1 => string 'a' (length=1) 2 => string 'b' (length=1) 3 => string 'c' (length=1)
但是如果是 http://localhost/index 就会提示404错误,这是为什么啊
index.php大概是这样
<?php
........
function analysisUri() {
var_dump(explode('/', $_SERVER['REQUEST_URI']));
}
echo $_SERVER['REQUEST_URI'];
analysisUri();
........virtualhost配置是这样
这个rewrite规则是从网上找到的
DocumentRoot /home/wwwOptions FollowSymLinks AllowOverride None #AllowOverride All <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / #不显示index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] #RewriteRule ^(.*)$ index.php?$1 [QSA,L] <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm
你的规则有问题。
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 行不通的,正确的应该是 RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]。? 才会吧后面的 $1 传给 index.php,而 / 告诉 apache 查找 index.php/ 目录下的 index 文件,自然是 404。
你可以添加如下配置到 httpd.conf,调试 mod_rewrite,通过查看 rewrite.log 文件可以知道通过 rewrite 得到的路径到底是什么,完成调试后移除这个配置,否则会有些性能安全方面的影响。
#输出调试信息到 rewrite.log
http://httpd.apache.org/docs/2.2/mod/...
另外,rewrite 规则完全没有必要写道 httpd.conf 里面,使用 .htaccess 比较好。
httpd.conf
DocumentRoot /home/wwwOptions FollowSymLinks AllowOverride None #AllowOverride All <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm
/home/www/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
#不显示index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!