PHP,使用htaccess重写URL和Microsoft IIS Url重写

时间:2009-06-22 21:14:06

标签: php iis url-rewriting

我习惯使用Apache服务器,所以当启用mod_rewrite时,我可以创建一个htaccess文件并使用URL重写。

这是我的htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

现在我已经构建了使用此URL重写模块的站点,但我已经了解到它是Microsoft服务器。我可以使用我的htaccess文件吗?有什么东西我需要改变才能让它发挥作用吗?如何判断是否在Microsoft服务器上设置了URL重写?

4 个答案:

答案 0 :(得分:10)

如果您使用IIS 7,则可以使用IIS URL重写模块,该模块具有"Import Rules" feature,可用于将mod_rewrite规则转换为IIS URL重写格式。这些特殊的重写规则不会转换,因为RewriteCond使用“-s”和“-l”标志来检查请求的URL是对应于非零大小的文件还是对应于文件系统上的符号链接。如果您的应用程序不使用任何符号链接,那么您可以安全地将这些条件替换为:

RewriteCond %{REQUEST_FILENAME} -f [OR]

然后使用IIS URL Rewrite UI转换规则。这将导致这些规则:

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^.*$" />
      <conditions logicalGrouping="MatchAny">
        <add input="{REQUEST_FILENAME}" matchType="IsFile"  />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory"  />
      </conditions>
      <action type="None" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url="^.*$" />
      <action type="Rewrite" url="index.php" />
    </rule>
  </rules>
</rewrite>

答案 1 :(得分:5)

您可以在Ionic's Isapi Rewrite Filter (IIRF)中按原样使用配置。

IIRF是免费的,开源的。

答案 2 :(得分:4)

.htaccess文件是一种Apache协议,用于为最终用户提供对Apache配置的访问,因此您无法将其用作IIS(Microsoft)服务器上的替代品。如果您在Windows上运行Apache,能够使用它。

IIS7有一个URL rewriting module,可以支持重写网址。还有ISAPI_Rewrite产品,它对以前版本的IIS也是如此。您可能需要在服务器上使用某种级别的管理权限才能使用这些模块中的任何一个(即,没有类似htaccess的机制)

答案 3 :(得分:0)

您可以在ISAPI_Rewrite 3或Helicon Ape产品中使用上述配置。