如何在IIS服务器上启用mod_rewrite?

3
我发现我的服务器(_SERVER["SERVER_SOFTWARE"] -Microsoft-IIS/7.0),架构为x86,未启用mod_rewrite功能。请问如何启用mod_rewrite?能否有人帮我解决这个问题。

在php.ini文件中启用了吗? - tuespetre
我是否在我的服务器上编辑了php.ini文件? - rms
你的架构是什么?Linux 还是 Windows?用的是哪个 Web 服务器? - shapeshifter
1
提醒大家注意:在此之前并没有明确说明是在IIS上,而不是Apache。有关Apache的答案当时是正确的。 - Charles
4个回答

3

对我有效的答案是安装Microsoft URL Rewrite模块,然后在站点根目录创建一个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>

2
如果您的网站托管在商业托管服务提供商那里,他们很可能已安装了 Microsoft URL Rewrite 模块。这为您提供了类似于 Apache mod_rewrite 模块的功能。
要测试此模块是否已安装,请在您的网站根目录中创建一个名为 web.config 的文件,并使用下面的内容尝试访问 http://www.domain.com/google,其中 domain.com 是您的网站域名。如果您被重定向到 google.com,则说明您的主机已安装了 URL 重写模块。

web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Redirect to google.com" stopProcessing="true">
                    <match url="^google$" />
                    <action type="Redirect" url="http://www.google.com/" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

0

0

1)找到httpd.conf文件(通常可以在名为conf、config或类似名称的文件夹中找到此文件)

2)找到并取消注释LoadModule rewrite_module modules/mod_rewrite.so这一行

3)找到包含DocumentRoot“C:/path/to/my/root”的行,您将在其中找到以下内容

请确保这两个大括号内的内容看起来像:

选项 全部

允许覆盖 全部

4) 现在全部完成,请重新启动Apache服务器,然后您就可以开始了。


在Windows上,Apache模块的后缀名为.dll,在Linux上,您可以在/etc/httpd//etc/apache2中找到配置。 - Michel Feldheim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接