我有域 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}&%{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}&%{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}&%{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网站的人来说,这将非常有用