Intereting Posts
Разбивка страницы WordPress на странице блога, работающая на странице результатов поиска Как узнать, какой плагин использует наибольший ресурс? Заставляет пользователей отображать по умолчанию Gravatars query_posts, которые имеют пользовательскую таксономию и ограничивают, что показывает, основываясь на таксономии как получить 5 максимальное количество от пользовательской таксономии в wordppress Импорт / экспорт настроек блога в среде WordPress Network Как добавить нескольких существующих пользователей на многосайтовый сайт? Как отображать сообщение Expending plugin on posts data table wordpress plugin Необходимо создать пользовательскую страницу на веб-сайте Как удалить тысячи несвязанных изображений? Файл для загрузки файла WordPress wp_delete_attachment не удаляет изображения в wp-content / uploads / Как создать пользовательский почтовый ящик, который объединяет разные сообщения вместе Как отключить сообщения и использовать только страницы добавьте ссылки на верхний уровень в меню wordpress, называемое «основным»,

В IIS остановите WordPress при сохранении моего файла web.config при вводе страницы конфигурации Permalinks

У меня есть сайт WordPress, установленный в IIS, и он работает нормально. В подпапке у меня есть и приложение ASP.NET, которое также работает отлично.

Перезапись URL-адреса WordPress вызывает ряд проблем в приложении, которые находятся во вложенной папке. Решение для этого просто: мой файл root.config выглядит так:

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.web> <customErrors mode="Off"/> </system.web> <location path="." inheritInChildApplications="false"> <system.webServer> <rewrite> <rules> <rule name="wordpress" enabled="true" patternSyntax="Wildcard"> <match url="*" negate="false"/> <conditions logicalGrouping="MatchAll"> <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> </location> </configuration> 

Главное здесь: inheritInChildApplications="false" внутри <location> . Это предотвратит распространение правил перезаписи на дочернее приложение ASP.NET, что наносит вред, как я уже объяснял ранее.

Все идет нормально.

Но представьте, что я просто вхожу в страницу конфигурации Permalinks, которая живет по этому пути: wp-admin/options-permalink.php .

В этом случае происходит что-то ужасное: WordPress автоматически считывает мой файл web-config, возможно, ищет тег <system.webServer> в <configuration> . Но этого нет, потому что я <system.webServer> в <location> .

Поскольку там нет правил перезаписи, WordPress просто добавляет блок <system.webServer> снова, заставляя его дублировать и сохраняет файл web.config.

Наличие двух блоков <system.webServer> в файле web.config приводит к тому, что веб-сайт разбивается с ошибкой с сообщением об ошибке 500. Журнал сервера скажет мне, что Config section 'system.webServer/rewrite/rules' already defined. Sections must only appear once per config file Config section 'system.webServer/rewrite/rules' already defined. Sections must only appear once per config file .

Пожалуйста, не то, что мне не нужно ударять «сохранить изменения» на странице конфигурации Permalinks, чтобы эта трагедия произошла, все, что мне нужно сделать, это ввести страницу. Затем WordPress выполнит все проверки и самостоятельно сохранит файл web.config.

Хотя я не планирую вводить эту страницу конфигурации, я считаю, что риск того, что вход на эту страницу случайно через год после создания веб-сайта вызовет эти ужасные 500 ошибок.

Поэтому после всего этого длинного поста, мой вопрос: знаете ли вы какие-либо методы или какие-либо конфигурации, которые заставят WordPress автоматически сохранять файл web.config при вводе страницы конфигурации Permalinks? Спасибо.

Вы можете предотвратить «жесткий» флеш, который обновляет .htaccess (Apache) или web.config (IIS) с фильтром flush_rewrite_rules_hard .

Мы также можем использовать вспомогательную функцию __return_false .

 add_filter( 'flush_rewrite_rules_hard', '__return_false' ); 

Этот код можно поместить в свой собственный плагин или в файл functions.php темы.