.htaccess to web.config for url rewrite and redirection


.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=$1&%{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代码吗?

试试这个。

在您的 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 文件中即可。

友情提供: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的内容

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

对于尝试在Windows服务器上托管PHP网站的人来说,这将非常有用