.htaccess в web.config для перезаписи и перенаправления URL-адресов
У меня есть домен xyz.com который размещен на сервере Windows.
Код для xyz.com написан на PHP (ранее он был в ASP.NET). База данных - MySQL (ранее она была в SQL server).
Теперь, после повторной разработки всего веб-сайта на PHP, я узнал, что .htaccess
не будет работать на Windows server. Я должен играть с 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
код?
3 answers
Любезно предоставлено: 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.
После долгих исследований и разработок и пробования различных способов я нашел решение, вот содержимое всего моего 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 на сервере Windows