7

我使用 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。请问有人可以指导我吗?

4

3 回答 3

4

这可能被视为作弊,但我们使用ISAPI_Rewrite,它让您只需将 .htaccess 文件用于 IIS。如果你能让他们把它放在服务器上,你就不需要翻译任何东西。

于 2009-04-16T14:41:13.997 回答
3

请注意,这仅适用于 IIS7而不适用于 IIS6。这也需要设置 FastCGI并安装和启用URL 重写模块。这些是您的托管人能够为您验证的内容。如果以上所有情况都成立,那么以下文件应该可以解决问题(您可能需要调整路径,但我认为如果您向主机提供此示例文件,您的主机将能够为您执行此操作。

<?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>

于 2009-04-14T01:59:39.017 回答
2

IIS7 及以上可以使用URL Rewrite 模块导入 Apache .htaccess 规则。

  1. 通过Microsoft Web 平台安装程序安装URL 重写模块
  2. 启动 IIS 管理器,然后在左侧的“连接”窗格中,选择您需要的站点(例如,默认网站)
  3. 在中心(功能视图)双击URL Rewrite
  4. 在右侧面板中单击Import Rules...然后将 .htaccess 文件中的规则粘贴到Rewrite rules框中
  5. 单击右栏中的应用。
于 2012-09-28T08:38:31.093 回答