【问题标题】:Codeigniter 1.7 on IIS 7.5IIS 7.5 上的 Codeigniter 1.7
【发布时间】:2015-11-14 19:05:38
【问题描述】:

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

首先,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 或者如果我在根目录。我不知道该怎么办,请帮帮我。

【问题讨论】:

    标签: php codeigniter iis-7 url-rewriting iis-7.5


    【解决方案1】:

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

    1. 转到您的 Web 应用程序目录下的 system 目录。因此,当您打开 Web 应用程序目录时,您应该会立即看到 system 目录。
    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 中,请不要担心。)

    【讨论】:

      【解决方案2】:

      好吧,最后经过一点测试,我修复了它,感谢上帝。首先我遇到了 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。

      【讨论】:

      • 请问那个 web.config 文件在哪里??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多