在IIS上,当我进入固定链接配置页面时,阻止WordPress重新保存我的web.config文件

时间:2016-02-17 作者:Marcos Buarque

我有一个Wordpress网站安装在IIS中,它工作正常。在我拥有的子文件夹和ASP上。NET应用程序,也可以正常工作。

Wordpress URL重写会导致子文件夹中的应用程序出现一系列问题。解决方案很简单:我的根网站。配置文件如下所示:

<?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配置文件,可能正在搜索标记<system.webServer><configuration> 标签但它不在那里,因为我已经包装好了<system.webServer><location> 标签

由于在那里找不到重写规则,Wordpress只需添加<system.webServer> 再次阻塞,使其重复,从而保存web。配置文件。

有两个<system.webServer> web上的块。配置文件导致网站严重崩溃,并显示500条错误消息。服务器日志会告诉我Config section \'system.webServer/rewrite/rules\' already defined. Sections must only appear once per config file.

请注意,我不必在Permalinks配置页面上点击“保存更改”,这样悲剧就会发生,我所要做的就是进入页面。Wordpress将执行所有检查并重新保存web。自行配置文件。

虽然我不打算进入那个配置页面,但我认为一年后,当网站投入生产时,意外进入该页面将引发这些可怕的500个错误,这是一种风险。

所以在写了这么长的文章之后,我的问题是:你知道有什么方法或配置可以阻止Wordpress自动保存web吗。当我进入Permalinks配置页面时,是否再次配置文件?非常感谢。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以防止“硬”刷新,从而更新。htaccess(Apache)或web。配置(IIS),使用flush_rewrite_rules_hard 滤器

我们还可以使用__return_false 此处为helper函数。

add_filter( \'flush_rewrite_rules_hard\', \'__return_false\' );
此代码可以放在您自己的插件或主题的functions.php 文件

相关推荐

将重写规则直接添加到.htaccess文件

我想添加一个简单的重写规则RewriteRule ^apply\\/? https://docs.google.com/forms/d/e/1FAIpQLSf5IrOhg0E_NAGZnOvMuaXhU80sio8bukaWVBkb87eEOa9kTw/viewform [L] 我的。htaccess文件如下# BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "EN