配置IIS下PHP环境:
下面步骤以php安装在D:/Program Files/php目录为例
1)复制php安装目录下php.ini到C:/WINDOWS/;
2)再复制php5ts.dll和libmysql.dll到WINDOWS/system32/中;
注:这两步很重要,我一开始以为这属于安装php的步骤,而我的机器已装有php,所以我就直接跳过了这两步操作,结果一运行看到的页面是一片空白。
3)添加一个php后缀:
打开IIS,点击"Web服务扩展"-->"添加一个新的Web服务扩展",在"扩展名"中输入"php",点击"添加",指向"D:/Program Files/php/php5isapi.dll" ,把"设置扩展状态为运行"勾上,点击"确定"。
4)添加ISAPI筛选器:
右键要配置的网站-->"属性"-->选择"ISAPI筛选器"-->"添加", "筛选器名称"中输入"php" ,可执行文件为"D:/Program Files/php/php5isapi.dll",点击"确定"。
5)添加扩展名映射:
选择"主目录"-->点击"配置"-->"添加", 可执行文件路径为"D:/Program Files/php/php5isapi.dll",扩展名为".php"-->"确定"。
6)添加默认内容页:
再选择"文档"-->点击"添加",输入"index.php"-->"确定",并且上移到最顶,点击"应用"-->"确定"。
重启IIS服务。
相关问题解决方案:
1)在IIS下配置PHP高版本5.28/5.2.9可能出现错误信息:"the specified module could not be found":
这是因为IIS应用程序作php映射时发现在可执行文件路径两边有双引号,应该将"D:/Program Files/php/php5isapi.dll"手动改成D:/Progra~1/php/php5isapi.dll(将Windows路径换为DOS路径),重启IIS,问题解决!
2)页面出现"……failed to open stream……Failed opening required……"错误信息:
从网上了解到这个问题是目录权限问题导致的,我的网站根目录在E:/shop下。于是我在shop目录下建立一个www目录,再将www目录作为网站根目录。分别给shop和www目录分配Everyone读权限。重启IIS服务,刷新页面,问题解决!
问题关键,网站根目录的上级目录的权限要和网站根目录的权限一样。
3)页面出现"Internal Server Error"错误信息:
关于这个问题,网上有人提出:"检查PHP网站目录下是否有.htaccess文件存在,此文件会干扰程序的正常运行,如果有此文件建议删除或改名"。这个做法是不可取的,因为.htaccess文件可以做大量范围的事情。包括:设置默认首页文件、自定义错误页面、重定向页面、实现PR劫持、屏蔽特定的用户IP地址、停止目录表、文件夹密码保护、变更文件扩展名、防盗链等等。
下面是我的网站下.htaccess文件的内容:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f #不是文件或不存在就进行RewriteRule
RewriteCond %{REQUEST_FILENAME} !-d #不是目录或不存在
RewriteCond $1 !^(index/.php|images|robots/.txt|css|js) [nocase] #nocase(忽略大小写)
RewriteRule ^(.*)$ index.php/$1 [L]
注:我的index.php的同级目录下还有css和js文件夹,所以加到了过滤条件中。
在.htaccess文件中定义了url重写规则,因此想到可能是未开启mod_rewrite模块造成的。摸索出以下两种解决方案:
a)开启Apache的mod_rewrite模块;
打开apache的配置文件httpd.conf :
找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#号。
找到
<Directory "Apache的文档根目录">
Options Indexes FollowSymLinks
AllowOverride None
Order Allow,Deny
Allow from all
</Directory>
将AllowOverride None改为AllowOverride All
注:当AllowOverrid设置为None时,.htaccess 文件将被完全忽略,所以要改为All。
b)在.htaccess 文件重写规则处加上IfModule指令(它是根据指定的模块是否启用而决定是否生效的指令),如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index/.php|images|robots/.txt|css|js) [nocase]
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
如果你确定不会用到Apache的url重写功能,也可以注释或者直接删掉这几行
最后别忘了重启Apache!
4)将CodeIgniter的URL中index.php隐藏
以Apache作为Web服务器,需开启mod_rewrite模块的支持;以IIS作为Web服务器,则要额外安装ISAPI_Rewrite扩展。
Apache下解决方法
1)开启Apache的mod_rewrite模块(同上)
2)编写.htaccess文件,放在index.php同级目录下
RewriteEngine On
RewriteCond $1 !^(index/.php|images|robots/.txt) [nocase]
RewriteRule ^(.*)$ index.php/$1 [L]
3) 修改application/config中的config.php文件:
改$config['index_page']="index.php"为$config['index_page']="";
IIS下解决方法
1)安装ISAPI_Rewrite 3.1,下载Lite版(精简版)
Lite版的缺点是不支持分站,一个IIS只能运行一个Global级的httpd.conf
下载地址:http://www.helicontech.com/download/isapi_rewrite/ISAPI_Rewrite3_0060_Lite.msi
2)配置URL重写规则(对应Apache下.htaccess文件中的重写规则)
httpd.conf文件内容:
# Helicon ISAPI_Rewrite configuration file
# Version 3.1.0.60
#括号中I表示忽略大小写
RewriteRule (index/.php|images|robots/.txt)/(.*) $0 [I,L]
RewriteRule ^(.*)$ index.php/$1 [I,L]