在 Windows 服务器 web.config 文件中写入动态重定向规则

Writing dynamic Redirect rule in Windows server web.config file

我正面临 SEO 规范问题,我正试图通过 web.config 文件解决该问题。在多个 URL 上访问同一页面(特别是 2 个)

我的服务器是基于 Windows 但我使用的是 PHP Codeigniter 脚本。

我的URL结构是

https://example.com/xyz/index.php/dynamic-part/optional-dynamic-part

但是 也可以使用

访问
example.com/xyz/dynamic-part/optional-dynamic-part

我要的是

  1. 唯一可访问的 link 应该是 例如.com/xyz/index.php/dynamic-part/optional-dynamic-part
  2. 如果有人试图以这种方式访问​​ https://example.com/xyz/dynamic-part/optional-dynamic-part,他应该被永久重定向到 https://example.com/xyz/index.php/dynamic-part/optional-dynamic-part

我尝试了以下方法:

<rule name="redirecting" patternSyntax="Wildcard">
            <match url="^ci/actionone*"/>
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                </conditions>
            <action type="Redirect" url="ci/index.php/{R:1}" redirectType="Permanent" />
        </rule>

另一个尝试是:

<rule name="someRule" stopProcessing="true">
<match pattern="^ci" />
<<conditions>
    <add input="{REQUEST_URI}" negate="true" type="Pattern" pattern="^index">
</<conditions>
<action type="Redirect" url="example.com/ci/index.php/actionone" redirectType="Permanent" />
</rule>

<rewriteMaps>
    <rewriteMap name="StaticRedirects">
        <add key="/ci/actionone" value="/ci/index.php/actionone" />
        
    </rewriteMap>
</rewriteMaps>  

请指导我如何解决这个问题。谢谢

又回来了!有适合我的解决方案

这是解决方案。

基本上我所做的是检查 URL 是否与特定字符串匹配 在我的例子中 ci/actionone 并且有任何字符串 URL 将被重定向到操作 URL.

<rule name="name1: with pagination">
    <match url="^(ci/actionone)/(.*)$"/>
    <action type="Redirect" url="ci/index.php/actionone/{R:2}"/>
</rule>

同样,如果 URL 包含一个确切的字符串,它将重定向到确切的操作 URL

这是因为访问第一页时没有分页,而下一页在 URL 中有分页错误。

<rule name="name2: without pagination">
    <match url="^(ci/actionone)$"/>
    <action type="Redirect" url="ci/index.php/actionone"/>
</rule>