你的规则有问题。
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
<IfModule mod_rewrite.c>
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
</IfModule>
http://httpd.apache.org/docs/2.2/mod/...
另外,rewrite 规则完全没有必要写道 httpd.conf 里面,使用 .htaccess 比较好。
httpd.conf
DocumentRoot /home/www
<Directory />
Options FollowSymLinks
AllowOverride None
#AllowOverride All
</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
</Directory>
/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]
</IfModule>