使用web.config文件在IIS上的Codeigniter 2

时间:2011-03-23 16:01:04

标签: php iis codeigniter web-config codeigniter-2

我有一个codeigniter应用程序在WAMP本地工作正常。但是,我无法让它在IIS服务器上工作。请注意,我不想启用查询字符串。

以下是我目前在web.config文件中的内容:

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Clean URL" stopProcessing="true">
                    <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>  

这会导致主页面正确加载:www.website.com/policies

但是,当我点击某个项目时,请访问:www.website.com/policies/policy/view/31

不显示正确的页面。主页面继续显示。

控制器是Policy,功能是view()。 Codeigniter文件位于服务器上的策略/文件夹中。

我认为问题可能出在我的web.config文件中。 Config文件的$ config ['base_url']是动态计算的,是正确的。 Config文件的$ config ['index_page']为空白。您认为导致此问题的原因是什么?

谢谢大家的帮助。

5 个答案:

答案 0 :(得分:31)

您是否看过CI论坛中的示例?

http://codeigniter.com/forums/viewthread/91954

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Rewrite to index.php">
                    <match url="index.php|robots.txt|images|test.php" />
                    <action type="None" />
                </rule>
                <rule name="Rewrite CI Index">
                    <match url=".*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>  

答案 1 :(得分:3)

我在root中放置了以下web.config代码,它运行良好。

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Imported Rule 1" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                        </conditions>
                        <action type="Rewrite" url="/index.php?{R:1}" />
                    </rule>
                    <rule name="Imported Rule 2" stopProcessing="true">
                        <match url="^(.*)$" ignoreCase="false" />
                        <conditions logicalGrouping="MatchAll">
                            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                            <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="index.php?{R:1}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>

答案 2 :(得分:2)

事实证明我没有安装Rewrite。这就是诀窍:

http://www.iis.net/downloads/microsoft/url-rewrite

我不确定codeigniter的错误页面是否有可能掩盖了错误,因为我无法确定它是否未从浏览器的错误屏幕安装。事件查看器,IIS日志和PHP日志都对这种情况没有帮助。

答案 3 :(得分:2)

UFF !!!哦!我的上帝!!!

最近我制作了一个带有CI和杂货的管理员控制面板。它在我的本地服务器上使用WAMP工作得非常好,具有漂亮的URL和重定向。我在谈论CI是我曾经工作过的最好的框架。它非常易于使用且记录良好!到CodeIgniter。

但是当我在IIS服务器7.XX上移动我的管理面板时,似乎我的梦魇开始了。一切都在停止没有重定向,没有错误显示没有发生任何事情。我很害怕为什么会这样。我挖谷歌,堆栈溢出,CI论坛差不多6个小时。我没有从任何地方收到任何东西。我很伤心:(

我想不出自己应该做些什么。然后,我让自己变得冷静和冷静,并开始逐步审查所有内容:

1.  Set error reporting on
2.  Check php info
3.  Check redirect/rewrite
4.  Check mysql/mysqli extension loaded or not in IIS server
5.  Converted my .htaccess file rule with web.config rule (Really helped me)
6.  Put web.config file in main directory (CI working folder) not in root folder

How to convert .htaccess in web.config?

然后,我发现一切都是正确的,除了IIS服务器上没有加载'mysqli'扩展名并且我的数据库配置凭据错误。然后我在php.ini中进行了更改(检查'phpinfo()'以查找IIS服务器上的php.ini路径)第881行,uncomment extension = php_mysqli.dll。

以下是我的CI配置设置:

$config['base_url'] = '';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

之后,立即重新打开我的CI管理面板!!!!!!一切哇!!哇!!像魅力一样工作:)他,他...... 我很高兴:) :)

这是我的web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1">
                    <match url="(.*)" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTPS}" pattern="off" ignoreCase="false" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{URL}" redirectType="Found" />
                </rule>
                <rule name="Imported Rule 1-1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="index.php?/{R:1}" appendQueryString="false" />
                </rule>
                <rule name="Imported Rule 2" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^application.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="/index.php?/{R:1}" appendQueryString="false" />
                </rule>
                <rule name="Imported Rule 3" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php?/{R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

这是我漂亮的网址类型

https://mysite.abc.com/administrator/admin/showUsers

administrator is my  admin folder

admin is my controller

and showUsers in my controller method

希望我糟糕的经历会帮助某人:)

答案 4 :(得分:0)

You can like this,
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions logicalGrouping="MatchAll">
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
          </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>