.htaccess 到 web.config 用于 url 重写和重定向

.htaccess to web.config for url rewrite and redirection

我的域 xyz.com 托管在 Windows 服务器上。

xyz.com 的代码写在 PHP 中(以前是在 ASP.NET 中)。数据库是 MySQL(以前它在 SQL 服务器中)。

现在在 PHP 重新开发了整个网站后,我开始知道 .htaccess 无法在 Windows 服务器上运行。我得玩 web.config.

这是我在 PHP 本地重新开发网站时使用的 .htaccess 代码:

RewriteRule index.html index.php

RewriteRule news.html news.php
RewriteRule search-results.html search-results.php

RewriteRule ^([A-Za-z0-9_\-]+).html$ pages.php?pageid=&%{QUERY_STRING} [ne]

一件奇怪的事情发生了

当我在 web.config 中添加以下代码行时,它运行良好

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

上面的代码将我重定向到 google.com,这意味着重写模块已经启用

但是当我将下面提到的代码添加到 web.config

 <rules>
            <rule name="REWRITE_TO_PHP">
            <match url="^(.+).html$" />
                <conditions logicalGrouping="MatchAll" />
                <action type="Rewrite" url="pages.php?pageid={R:1}" />
            </rule>

它给我错误:

HTTP 错误 500.19 - 内部服务器错误 请求的页面无法访问,因为该页面的相关配置数据无效。

谁能帮我创建等效的 web.config 代码?

致谢:http://cbsa.com.br/tools/online-convert-htaccess-to-web-config.aspx

<?xml version="1.0" encoding="UTF-8"?>
    <configuration> 
        <system.webServer> 
            <rewrite> 
                <rules>
                    <rule name="rule 1p">
                        <match url="index.html"  />
                        <action type="Rewrite" url="/index.php"  />
                    </rule>
                    <rule name="rule 2p">
                        <match url="news.html"  />
                        <action type="Rewrite" url="/news.php"  />
                    </rule>
                    <rule name="rule 3p">
                        <match url="search-results.html"  />
                        <action type="Rewrite" url="/search-results.php"  />
                    </rule>
                    <rule name="rule 4p">
                        <match url="^([A-Za-z0-9_\-]+).html$"  />
                        <action type="Rewrite" url="/pages.php?pageid={R:1}&amp;%{QUERY_STRING}"  />
                    </rule>
                </rules> 
            </rewrite> 
    </system.webServer> 
</configuration>

试试这个。

在您的 web.config 文件中,找到

<rewrite>
     <rules>

这个,然后把代码放在里面。 <rewrite><rules> .. codes here... </rules></rewrite> 标签。

<rule name="rule 1y">
    <match url="index.html"  />
    <action type="Rewrite" url="index.php"  />
</rule>
<rule name="rule 2y">
    <match url="news.html"  />
    <action type="Rewrite" url="news.php"  />
</rule>
<rule name="rule 3y">
    <match url="search-results.html"  />
    <action type="Rewrite" url="search-results.php"  />
</rule>
<rule name="rule 4y">
    <match url="^([A-Za-z0-9_\-]+).html$"  />
    <action type="Rewrite" url="pages.php?pageid={R:1}&amp;%{QUERY_STRING}"  />
</rule>

因此文件将如下所示:

<?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>
        <rewrite>
            <rule name="rule 1y">
                <match url="index.html"  />
                <action type="Rewrite" url="index.php"  />
            </rule>
            <rule name="rule 2y">
                <match url="news.html"  />
                <action type="Rewrite" url="news.php"  />
            </rule>
            <rule name="rule 3y">
                <match url="search-results.html"  />
                <action type="Rewrite" url="search-results.php"  />
            </rule>
            <rule name="rule 4y">
                <match url="^([A-Za-z0-9_\-]+).html$"  />
                <action type="Rewrite" url="pages.php?pageid={R:1}&amp;%{QUERY_STRING}"  />
            </rule>
        </rewrite>
    </system.webServer>
</configuration>

注意:请不要直接用您的 web.config 文件替换代码。只需将所需的行放入 web.config 文件即可。

经过长时间的研发和尝试各种不同的方法我找到了解决方案,这里是我的全部内容web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>



    <system.webServer>
        <defaultDocument enabled="true">
            <files>
                <clear />
                <add value="index.php" />

            </files>
        </defaultDocument>

        <rewrite>
            <rules>

            <rule name="Imported Rule 3" stopProcessing="true">
                <match url="^index\.html$" ignoreCase="false" />
                <action type="Rewrite" url="index.php" appendQueryString="false" />
            </rule> 

            <rule name="Imported Rule 2" stopProcessing="true">
                <match url="^news\.html$" ignoreCase="false" />
                <action type="Rewrite" url="news.php" appendQueryString="true" />
            </rule>

            <rule name="Imported Rule 4" stopProcessing="true">
                <match url="^(.*)\.html$" ignoreCase="false" />
                <action type="Rewrite" url="pages.php?pageid={R:1}" appendQueryString="false" />
            </rule> 





            </rules>
        </rewrite>

    </system.webServer>




    <system.data>
        <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
    </system.data>
</configuration>

这对试图在 Window 服务器

上托管 PHP 网站的人非常有用