美文网首页
ThinkPHP项目发布到IIS

ThinkPHP项目发布到IIS

作者: _gmyboy | 来源:发表于2017-03-23 17:08 被阅读0次

    最近在开发微信服务号时碰到一个问题:阿里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了。

    相关文章

      网友评论

          本文标题:ThinkPHP项目发布到IIS

          本文链接:https://www.haomeiwen.com/subject/eyzznttx.html