通过 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>
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>