在 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
我要的是
- 唯一可访问的 link 应该是
例如.com/xyz/index.php/dynamic-part/optional-dynamic-part
- 如果有人试图以这种方式访问
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>
我正面临 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
我要的是
- 唯一可访问的 link 应该是 例如.com/xyz/index.php/dynamic-part/optional-dynamic-part
- 如果有人试图以这种方式访问
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>