在IIS上删除Codeigniter的index.php?

时间:2012-10-09 20:40:18

标签: windows codeigniter iis rewrite

我知道我可以使用以下web.config代码删除url的'index.php'部分:

<rewrite>
  <rules>
    <rule name="Rule" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="false" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
        <add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
      </conditions>
      <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>

问题是我在子目录(mydomain.com/codeigniter)中安装了CI,而我无法理解web.config文件。

您知道如何更改此内容以使其适用于子目录吗?

谢谢:)

2 个答案:

答案 0 :(得分:14)

我在根目录中有WordPress,在子目录中有我的CodeIgniter应用程序。我创建了一个与你类似的web.config并将其保存在子目录中。我的CI应用程序不再需要url中的index.php。

首先,我在<action url="myapp/index.php/{R:1}"...>中添加了我的子目录,并希望可以限制它仅查看子目录但是失败。我删除子目录并将其保留为原始目录,但将web.config移动到子目录并且它可以工作。

因此,我想也许您可以创建两个具有不同规则的web.config文件,并将它们保存在不同的目录中。

另一个注释可能有所帮助:启用错误消息以从IIS输出详细信息。我使用这些技巧来了解IIS如何查找我的文件。它是<httpErrors errorMode="Detailed" /><asp scriptErrorSentToBrowser="true"/><system.web>部分,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <system.webServer>

        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>

        <rewrite>
        <rules>
            <rule name="RuleRemoveIndex" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="false" />
                <conditions>
                    <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="true"/>
            </rule>
        </rules>
        </rewrite>

    </system.webServer>

    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>

</configuration>
希望它有所帮助!

答案 1 :(得分:0)

  

将web.config放入根目录。

     

用户代码:

 <?xml version="1.0" encoding="UTF-8"?>
  <configuration>
 <system.webServer>

    <httpErrors errorMode="Detailed" />
    <asp scriptErrorSentToBrowser="true"/>

    <rewrite>
    <rules>
        <rule name="RuleRemoveIndex" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions>
                <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="true"/>
        </rule>
    </rules>
    </rewrite>

</system.webServer>

<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true"/>
</system.web>