URL-маршрутизация не работает в .NET Virtual Directory через сайт WordPress - PullRequest
0 голосов
/ 03 декабря 2018

Допустим, это корневая сеть, которая является сайтом WordPress PHP:

www.mywebsite.com

Я превратил подпапку в корневой сети в приложение .NET (рабочий сайт ASP.NET)

www.mywebsite.com/subapp

"Subapp" сайта ASP.NET работает нормально, за исключением того, что не работает веб-маршрутизация.

Страница "~ / Login.aspx" работает нормально.Эта страница была перенаправлена ​​в «~ / Login», которая нормально работает как корневая сеть, но не работает в виртуальном каталоге.

Это работает:

www.mywebsite.com/subapp/Login.aspx

Это не работает:

www.mywebsite.com/subapp/Login

WordPress захватывает маршрутизацию и показывает WordPress «Страница не найдена».

Это web.config сайта WordPress:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)"/>
<conditions><add input="{HTTPS}" pattern="off" ignoreCase="true"/></conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
<rule name="WordPress: https://www.mywebsite.com" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule></rules>
</rewrite>
</system.webServer>
</configuration>

Это код C # веб-маршрутизации «subapp»:

using System.Web.Routing;

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapPageRoute("login", "Login", "~/Login.aspx");
    }
}

1 Ответ

0 голосов
/ 03 декабря 2018

Я решил свою проблему, удалив «Правило перезаписи URL» файла web.config на сайте WordPress.

Это измененный файл web.config, который устранил проблему:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)"/>
<conditions><add input="{HTTPS}" pattern="off" ignoreCase="true"/></conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Это оригинальный файл web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)"/>
<conditions><add input="{HTTPS}" pattern="off" ignoreCase="true"/></conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
<rule name="WordPress: https://www.mywebsite.com" patternSyntax="Wildcard">
<match url="*"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php"/>
</rule></rules>
</rewrite>
</system.webServer>
</configuration>

Но, однако, с этим редактированием WordPress не может перехватить любую ошибку «Страница не найдена».

Предыдущая, если я введу случайный URL на сайте WordPress, он будет захвачен и отобразит красивую страницу «Страница не найдена», но вернет только страницу сервера по умолчанию 404.

...