У меня есть домен xyz.com, который размещен на сервере Windows.
Код для xyz.com написан на PHP (ранее это было в ASP.NET). База данных — MySQL (ранее это было на сервере SQL).
Теперь, после перестройки всего сайта на PHP, я узнал, что .htaccess
не будет работать на сервере Windows. Я должен играть с web.config
,
Вот .htaccess
код, который я использовал, когда я перерабатывал сайт на PHP локально:
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
код?
Предоставлено: 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 найдите
<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.
После выполнения R&D в течение долгого времени и пробуя различные способы, я нашел решение, вот содержание всего моего 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>
Это будет очень полезно для человека, который пытается разместить сайт PHP на Window Server