通过 web.config 将 Azure 中 WordPress 页面上的“.php”扩展名重定向到非扩展名 url

Redirect '.php' extension to non-extension url on WordPress page in Azure through web.config

Dependencies:我是 运行 Azure 应用服务上的 WordPress 站点。

目标: 如果有人访问:

example.com/my-page.php

然后他们被重定向到:

example.com/my-page/

或(没有反斜杠):

example.com/my-page

我查看了整个 Whosebug 以找到解决方案,但没有任何内容是 WordPress/Azure 具体的,因此没有用。

答案很简单,通过 Apache 和一个 .htaccess 文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

但是当我尝试使用 WordPress 声明为默认重定向以外的任何内容编辑 web.config 文件时,事情变得棘手。

这是我目前在 web.config 中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="WordPress: https://example.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>
        <rule name="hide .php extension" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            </conditions>
          <action type="Rewrite" url="{R:1}.php" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

第一条规则通过 index.php 转发 WordPress 的所有请求。第二条规则是我在网上找到的,可以帮助将所有以 .php 结尾的请求转换为非扩展 URL。没用。

有人有针对这种特殊情况的有效解决方案吗?

听起来你有一个适用于 Apache 的 .htaccess 文件,所以你可以尝试参考博客 Convert .htaccess to web.config to realize your needs. And to follow the section How to use IIS Manager to import .htaccess files 的博客,你可以更容易地使用工具 URL Rewrite > Import Rules > Import mod_rewrite Rules IIS 管理器自动转换它。

希望对您有所帮助。

知道了。这是我的解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Remove any php extensions if it ends in php">
          <match url="^(.*)\.php$" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Redirect" url="{R:1}" />
        </rule>
        <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>
    </rewrite>
  </system.webServer>
</configuration>