url-rewrite - 用 apache rewrite 和 php 实现单一入口时候出现的一个问题
高洛峰
高洛峰 2017-04-10 14:22:38
0
2
419

我想用 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大概是这样


      

virtualhost配置是这样

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

DocumentRoot /home/www  Options FollowSymLinks AllowOverride None #AllowOverride All  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]    Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm 
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复 (2)
刘奇

你的规则有问题。

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  RewriteLog "/var/log/apache2/rewrite.log" RewriteLogLevel 3 

http://httpd.apache.org/docs/2.2/mod/...

另外,rewrite 规则完全没有必要写道 httpd.conf 里面,使用 .htaccess 比较好。

httpd.conf

DocumentRoot /home/www  Options FollowSymLinks AllowOverride None #AllowOverride All   Options Indexes FollowSymLinks MultiViews AllowOverride None #AllowOverride All Order allow,deny allow from all DirectoryIndex index.php index.html index.htm 

/home/www/.htaccess

 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
      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!