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

IIS7 и URLRewrite не работают с перенаправлениями Wordpress 3.1.1

У меня возникла интересная проблема с переходом на многосайтовый WordPress 3.1.1 и правилами перезаписи URL. маршрутизация index.php, а также правила ms-files.php? file = не работают по всем направлениям. Сайт ROOT имеет функциональность, которая работает, когда вы перенаправляете постоянные ссылки через index.php. (edit: Это также распространено на сетевых сайтах, из того, что я вижу, Правило 7 является виновником сбоя здесь.)

Правило для медиа (правило 2) также не работает. Сгенерированная ссылка возвращает ошибку стиля 404 "упс не найдена".

Все выглядело правильно в разделе правил, добавленном ниже:

           <rule name="WordPress Rule 1" stopProcessing="true">
                <match url="^index\.php$" ignoreCase="false" />
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 2" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
                <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
            </rule>
            <rule name="WordPress Rule 3" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
                <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
            </rule>
            <rule name="WordPress Rule 4" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                </conditions>
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 5" stopProcessing="true">
                <match url="^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)" ignoreCase="false" />
                <action type="Rewrite" url="{R:1}" />
            </rule>
            <rule name="WordPress Rule 6" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
                <action type="Rewrite" url="{R:2}" />
            </rule>
            <rule name="WordPress Rule 7" stopProcessing="true">
                <match url="." ignoreCase="false" />
                <action type="Rewrite" url="index.php" />
            </rule>

Вы можете просмотреть выставленное поведение, посетив: UB News Staging site 1 UB News Staging Site 2

Обратите внимание на промежуточном сайте 2, как СМИ не работают правильно. Однако, когда вы переходите по следующей ссылке, формат работает, и фотография отображается так, как должна. http://staging.business-school-online.com/news/wp-includes/ms-files.php?file=2011/04/online-education-300x198.jpg

изменить: созданная WP ссылка http://staging.business-school-online.com/news/files/2011/04/online-education-300x198.jpg

Может ли кто-нибудь дать некоторое представление о неправильном правиле перезаписи URL? согласно регулярному выражению, структура верна.

Я не работал со ссылками на wordpress как таковыми, но давайте начнем с правила медиа. Кажется, в действии не хватает двух вещей. У него нет / news /, который доступен в {R: 1}, и он не учитывает -300x198. Не учитывая размер изображения, это позаботится о корне:

<rule name="WordPress Rule 2" stopProcessing="true">
   <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
   <action type="Rewrite" url="{R:1}wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
</rule>

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

Три хороших варианта устранения неполадок:

  • Отслеживание неудачных запросов, будет отображаться до и после путей для правил
  • Журналы IIS покажут, какой путь был предпринят. Например, должно появиться что-то вроде «wp-includes / ms-files.php? File = 2011/04 / online-education.jpg»
  • Procmon с сайта www.sysinternals.com покажет, по какому пути он пытается получить доступ на диске.