Назад | Перейти на главную страницу

Удаление завершающих слэшей в блоге WordPress, размещенном на IIS

У меня есть блог WordPress, размещенный в моем виртуальном каталоге IIS, все URL-адреса которого заканчиваются косой чертой. Например:

http://www.example.com/blog/

В моем web.config определены следующие правила:

<rule name="wordpress" 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>

<rule name="Redirect-domain-to-www" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="example.com" />
    </conditions>
    <action type="Redirect" url="http://www.example.com/blog/{R:0}" />
</rule>

Кроме того, я попытался добавить следующее правило для удаления завершающих слэшей:

<rule name="Remove trailing slash" stopProcessing="true">
    <match url="(.*)/$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

Кажется, что последнее правило совсем не работает. Кто-нибудь здесь пытался удалить завершающие косые черты из блогов WordPress, размещенных на IIS?

WordPress принимает URL как с косой чертой, так и без нее. Так что на входящей стороне проблем нет.

Он просто генерирует URL-адреса с завершающей косой чертой, поэтому вместо использования входящего правила перезаписи вы должны использовать исходящее правило перезаписи, чтобы просто удалить косые черты, если они есть.

Поскольку исходящие правила не работают вместе со сжатием вывода, вы должны отключить это. Вместе со стандартным правилом перезаписи для WordPress вы получите следующий файл web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="wordpress" 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>
            <outboundRules>
                <rule name="Remove trailing slash" preCondition="IsHTML">
                    <match filterByTags="A, Form, IFrame" pattern="(.*)/$" />
                    <action type="Rewrite" value="{R:1}" />
                </rule>
                <preConditions>
                    <preCondition name="IsHTML">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
    </system.webServer>
</configuration>

Надеюсь это поможет.