将Apache .htaccess文件转换为IIS web.config

时间:2009-03-31 18:52:24

标签: apache iis .htaccess web-config webserver

我使用PHP,MySQL和Apache在我的本地开发了一个应用程序,它有一个包含这个的.htaccess文件:

#Setting the default handler.
  DirectoryIndex home.do

<IfModule mod_mime.c>
  #Supporting .do extensions    
     AddType application/x-httpd-php .do
</IfModule>

<IfModule mod_rewrite.c>
  #Removing .do file extension if necessary
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME}\.do -f
     RewriteRule ^(.*)$ $1.do
</IfModule>

但我告知我的客户的Web服务器是IIS,我必须使用web.config文件而不是.htaccess。有人可以指导我完成这个吗?

3 个答案:

答案 0 :(得分:4)

这可能被视为作弊,但我们使用ISAPI_Rewrite,它允许您只使用IIS的.htaccess文件。如果您可以将它们放在服务器上,则无需翻译任何内容。

答案 1 :(得分:3)

请注意,这只适用于IIS7上的IIS7和。还要安装并启用this requires FastCGI to be setupthe URL Rewriting module。这些是您的主机可以为您验证的内容。如果上述所有情况都属实,那么以下文件应该可以解决问题(您可能需要调整路径,但我认为如果您向他们提供此示例文件,您的主机将能够为您执行此操作。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <sectionGroup name="system.webServer">
            <sectionGroup name="rewrite">
                <section name="rewriteMaps" overrideModeDefault="Allow" />
                <section name="rules" overrideModeDefault="Allow" />
        </sectionGroup>
    </sectionGroup>
</configSections>

<system.webServer>
    <!-- Mapping the .do extension to the PHP ISAPI module -->
    <handlers>
        <!-- the following line is very specific to your host
             please check the module name and the scriptProcessor 
             path with the system administrator! basically this is 
             the same as
             http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/#EnableFastCGI
             only in .config format. -->
        <add name="MaskDoAsPHP" path=".do" verb="GET,HEAD,POST,DEBUG" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" />
    </handlers>

    <!-- Setting the default handler. -->
    <defaultDocument>
        <files>
            <clear />
            <add value="home.do" />
        </files>
    </defaultDocument>

    <rewrite>
        <rules>
            <rule name="Removing do extension" 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="{R1}.do" appendQueryString="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

答案 2 :(得分:2)

IIS7及更高版本可以使用 URL重写模块导入Apache .htaccess规则。

  1. 通过 Microsoft Web Platform Installer
  2. 安装URL Rewrite module
  3. 启动IIS管理器,在左侧的“连接”窗格中,选择所需的站点(例如,默认网站)
  4. 在中心(功能视图)中,双击 URL重写
  5. 在右侧面板中点击导入规则... ,然后将.htaccess文件中的规则粘贴到重写规则框中
  6. 点击右栏中的“应用”。