0

我想向您寻求有关在 IIS 7.5 版上部署 Codeigniter 应用程序的帮助。我已经尝试在这里阅读与 Codeigniter 和 IIS 相关的其他帖子,但它们都不起作用。我使用 CodeIgniter 1.7 开发了一个在 Apache 中运行良好的应用程序,但我无法让它在 Windows 7 Ultimate 下的 IIS 7.5 中运行。

phpconfig的IIS数据

首先,php 已经在服务器中工作,我按照所有步骤使其工作,我还安装了 IIS_UrlRewriteModule,我认为这是 php 应用程序工作和使用 htaccess 等文件所必需的。(附件是服务器中phpinfo的JPG)。这是一个本地服务器 IIS 7.5。

之后确保 PHP 工作正常,我将 Web 应用程序的文件夹放在 C:\inetpub\wwwroot\ 中,这是我在 apache 中使用的 .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /application/index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /application/index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ application/index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 index.php
</IfModule>

我读到,使用 IIS 你必须使用 web.config 文件,所以我根据 stackoverflow 的另一篇文章的示例创建了一个文件,它具有以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="MyRule"> <match url="^(.*)$" /> 
                    <conditions>
                        <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}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration> 

但是,当我转到“http://localhost/application”时,我得到了这个:

网站文件目录

如果我输入“http://localhost/application/index.php”,我会得到错误 500。如果我在应用程序根目录中只有 web.config,或者如果我在根目录中有 .htaccess,我会遇到同样的情况。我不知道该怎么办,请帮助我。

4

2 回答 2

1

首先不需要web.config!然后检查您的普通 php 代码(没有 codeigniter)是否在 IIS 下工作正常。如果是,则必须通过添加 2 行代码来修改 Code Igniter 的 php 文件之一。从 Apache 复制使用Code Igniter的 Web 应用程序目录。

  1. 转到您的 Web 应用程序目录下的系统目录。因此,当您打开 Web 应用程序目录时,您应该立即看到系统目录。
  2. 然后进入core目录,在编辑器中打开URI.php,找到一个名为_parse_request_uri()的函数。
  3. 在函数的开头只需添加以下行:

    if(!isset($_SERVER['REQUEST_URI']))
        $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];
    

所以在添加上面两行之后,修改后的函数应该是这样的,

    protected function _parse_request_uri()
    {
        if(!isset($_SERVER['REQUEST_URI']))
            $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];

        if ( ! isset($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME']))

保存 URI.php,修改后的代码应该可以在 IIS 和非 IIS 网络服务器(包括 Apache)上运行。(在 Apache 下修改的行没有效果!所以如果您不小心将相同的代码复制到 Apache 中,请不要担心。)

于 2015-11-14T11:05:38.397 回答
0

好吧,最后经过一点测试,我修复了它,感谢上帝。首先我遇到了 php.ini 的问题,因为扩展目录错误,所以当它试图找到 mysql 和 mssql 扩展时,它在 PHP 日志中给了我一个错误。之后我修改了 IIS 管理器中的处理程序映射,我编辑了我为 PHP 创建的模块映射,在请求限制部分我检查了“仅当请求映射到文件时才调用处理程序”,然后我修改了 web.config像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="MyRule"> <match url="^(.*)$" /> 
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/application/index.php?/{R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
        <defaultDocument>
            <files>
                <add value="index.php" />
            </files>
        </defaultDocument>
        <security>
         <requestFiltering>
            <hiddenSegments applyToWebDAV="false">
               <add segment="application" />
               <add segment="system" />
            </hiddenSegments>
         </requestFiltering>
      </security>
    </system.webServer>
</configuration>  

所以现在它可以工作了:D。

于 2012-09-13T17:17:23.173 回答