但是如果是 http://localhost/index 就会提示404错误,这是为什么啊

我想用 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)

index.php大概是这样

<?php........function analysisUri() {    var_dump(explode('/', $_SERVER['REQUEST_URI']));
}echo $_SERVER['REQUEST_URI'];analysisUri();

........

virtualhost配置是这样

这个rewrite规则是从网上找到的

DocumentRoot /home/www<Directory />
	Options 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]
	</IfModule></Directory><Directory /home/www/>
	Options Indexes FollowSymLinks MultiViews	AllowOverride None	#AllowOverride All 
	Order allow,deny
	allow from all

	DirectoryIndex index.php index.html index.htm


叮当猫咪
浏览 248回答 2
2回答

PIPIONE

你的规则有问题。RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]&nbsp;行不通的,正确的应该是&nbsp;RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]。?&nbsp;才会吧后面的&nbsp;$1&nbsp;传给 index.php,而&nbsp;/&nbsp;告诉 apache 查找&nbsp;index.php/目录下的 index 文件,自然是 404。你可以添加如下配置到 httpd.conf,调试 mod_rewrite,通过查看 rewrite.log 文件可以知道通过 rewrite 得到的路径到底是什么,完成调试后移除这个配置,否则会有些性能安全方面的影响。#&nbsp;输出调试信息到&nbsp;rewrite.log<IfModule&nbsp;mod_rewrite.c> &nbsp;&nbsp;&nbsp;&nbsp;RewriteLog&nbsp;"/var/log/apache2/rewrite.log" &nbsp;&nbsp;&nbsp;&nbsp;RewriteLogLevel&nbsp;3</IfModule>

慕少森

RewriteCond&nbsp;%{SCRIPT_FILENAME}&nbsp;!-fRewriteCond&nbsp;%{SCRIPT_FILENAME}&nbsp;!-dRewriteRule&nbsp;^(.*)$&nbsp;index.php/$1
打开App,查看更多内容
随时随地看视频慕课网APP