.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 код?

Author: user3782114, 2016-02-17

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}&amp;%{QUERY_STRING}"  />
                    </rule>
                </rules> 
            </rewrite> 
    </system.webServer> 
</configuration>
 0
Author: user1785684, 2016-02-17 16:53:57

Попробуйте вот это.

В файле 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.

 0
Author: I Am Stack, 2016-02-18 10:32:08

После долгих исследований и разработок и пробования различных способов я нашел решение, вот содержимое всего моего 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

 0
Author: user3782114, 2016-02-18 13:15:54