ThinkPHP项目发布到IIS

2017-03-23  本文已影响0人  _gmyboy

最近在开发微信服务号时碰到一个问题:阿里ECS的80端口被IIS占用,而微信服务号中使用JSSDK必须设置安全域名,但是这个安全域名不能带有端口信息。这就产生冲突了。经过一番(URL隐式转发、添加CNAME解析)折腾未果,后来想到干脆把项目从原先的Apache服务器移植到IIS中,在ECS自带的IIS上做子域名绑定是很方便的,又是一番折腾,终于搞定。于是记录下自己踩的坑。

环境:windows server 2007 32bit、IIS7.0、PHP5.6.3

安装PHP

1、去PHP官网选择一个NTS版本下载;

2、解压后将php-5.6.30-nts-Win32-VC11-x86文件夹根目录下的


二选一

php.ini-program或php.ini-production改成php.ini。并在php.ini中添加如下配置:

extension_dir = "E:\mingyong\php\ext" #设置php模块路径
date.timezone = PRC #设置时区为中国时区
register_globals = On #开启GET数据调用,PHP5.6以上的版本已废弃,请设置成OFF
short_open_tag = On #php支持短标签
cgi.force_redirect = 0 #开启以CGI方式运行php
fastcgi.impersonate = 1;
cgi.rfc2616_headers = 1
cgi.fix_pathinfo=1

3、此时运行php.exe不报错即为安装成功,如果报MSVCR110丢失,需要安装vc11 - Microsoft Visual C++ 2012 Redistribution

配置IIS

如果还没有IIS,要在win server的服务器管理器中添加web服务(IIS)角色。

1、在服务器管理器中选添加角色功能,选中winRM IIS 扩展、CGI安装。我这里全选了。

添加角色

2、IIS中添加项目(主机名要和子域名对应,端口为80,IP地址就是ECS的固定IP),并把ThinkPHP项目copy到对应的物理路劲下

我添加shtx的项目

3、选择处理程序映射

处理映射程序
添加如图所示的FastCGI模块映射
添加模块映射

4、在fastCGI setting中(如果此时没有fastCGI选项,请安装Administration Pack或者升级到IIS7.5)

fastCGI Settings
编辑FastCGI,添加如图所示的环境变量
EnvironmentValue
EnvironmentValue

url重写

经过以上两步,项目应该能正常访问了,但是由于是ThinkPHP开发的项目,会遇到url重写的问题,此时需要在项目根目录下的web.config中添加重写规则,添加后的样子如下:

<configuration>
    <system.webServer>
        <directoryBrowse enabled="false" />
        <rewrite>
            <rules>
                <rule name="cnUrl" stopProcessing="true">
                    <match url="!^(index\.php|images|assets|robots\.txt)" />
                    <action type="Rewrite" url="404.php" />
                </rule>

                <rule name="OrgPage" stopProcessing="true">
                    <match url="^(.*)$" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTP_HOST}" pattern="^(.*)$" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <httpErrors>
            <remove statusCode="500" subStatusCode="-1" />
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/404.php" responseMode="ExecuteURL" />
            <error statusCode="500" prefixLanguageFilePath="" path="/404.php" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

至此,PHP就可以发布到IIS了。

上一篇 下一篇

猜你喜欢

热点阅读