如何设置 IIS7 以将所有内容传递给 Joomla?

如何设置 IIS7 以将所有内容传递给 Joomla?

上下文:IIS7,Win7,Joomla 1.5

使用此 URL,http://网站/foo,如果我在 Joomla 安装的根目录中有一个名为“foo”的子目录,IIS7 会尝试在其中找到 index.php 并在 Joomla 启动之前返回 403。

使用此 URL,http://website/bar,如果我没有名为“bar”的子目录,IIS7 会将 URL 传递给 Joomla,并让其负责该页面是否存在。

在的情况下http://网站/foo,我该如何设置 IIS7 以便它忽略存在“foo”子目录的事实,并将完整的 URL 传递给 Joomla?

答案1

作为在 IIS 上安装 Joomla 的一部分,您可能(或至少应该)创建了一个类似于这样的 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Security Rule" stopProcessing="true">
          <match url="^(.*)$" ignoreCase="false" />
          <conditions logicalGrouping="MatchAny">
            <add input="{QUERY_STRING}" pattern="mosConfig_[a-zA-Z_]{1,21}(=|\%3D)" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="base64_encode.*\(.*\)" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="(\&lt;|%3C).*script.*(\>|%3E)" />
            <add input="{QUERY_STRING}" pattern="GLOBALS(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
            <add input="{QUERY_STRING}" pattern="_REQUEST(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
          </conditions>
          <action type="CustomResponse" url="index.php" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
        </rule>
        <rule name="SEO Rule">
          <match url="(.*)" ignoreCase="false" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
            <add input="{URL}" negate="true" pattern="^/index.php" ignoreCase="false" />
            <add input="{URL}" pattern="(/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$" />
          </conditions>
          <action type="Rewrite" url="index.php" />
        </rule>
      </rules>
    </rewrite>
 </system.webServer>
</configuration>

要阻止 IIS 在重写到 Joomla 之前检查现有文件和目录,您应该删除以下两行:

    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />

答案2

我得到的最佳答案来自堆栈溢出

相关内容