PHP url伪静态
作者:Wucl
时间:2014-12-01
章节内容:基础准备、实现过程、个人心得。
1. 基础准备:
在此之前我总结过url重定向的处理,而做url伪静态的基础知识就是url重定向,所以很多基础知识在文中将不再陈述。
项目的url伪静态需求:若url有对应的文件时显示对应的文件,若没有则重定向到index.php。
2. 实现过程:
1) 确认自身情况:有2个以上的PHP程序存放在同一服务下,对服务的主配置文件有777权限。
2) 在本地完成两个测试项目的url伪静态:因为修改主配置文件需要重启服务才会生效,所以为避免频繁的重启服务,我选择.htaccess文件做url伪静态初步设计。经过反复的测试最终定格配置如下:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^extract\/.*$ extract/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^daily\/.*$ daily/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [QSA,L]
3) 把配置从.htaccess文件迁移到主配置文件:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^extract\/.*$ extract/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^daily\/.*$ daily/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [QSA,L]
4) 关闭主配置文件重定向设置,原因如下(百度搜搜):
性能:如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
3. 个人心得:
回头直接看最终配置时,感慨发现多么简单的配置啊!但只有自己明白这个“简单的配置”是通过不断的查找资料、不断的测试才得出结果。