regex 如何捕获和重定向web.config中以.cfm结尾的文件减去index.cfm?

7lrncoxx  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个网站,主页在index. cfm。页面内容是基于URL参数包含的,所以example.com/about(在web.config文件中被重写为index.cfm?p=about)将包含about. cfm。我想阻止人们直接访问about.cfm等文件,理想情况下将它们永久重定向到/about,但是我显然需要允许访问index.cfm,因为不将其从规则中排除会导致无限重定向。
我创建的规则(理论上也应该允许访问/ AJAX /目录中的文件)是:

<rule name="don't allow direct access to .cfm pages" stopProcessing="true">
  <match url="^(.+[^\/ajax\/]\/)?([^\/]+[^index]).cfm$" />
  <action type="Redirect" redirectType="Permanent" url="{R:1}/{R:2}" />
</rule>

According to the tester at regex101.com,这不应该选择下面列表中的1,2和4(根据需要),选择3(根据需要),但捕获整个index.cfm?p=contact in 5,我怀疑这是问题所在:

  1. http://example.com/contact
  2. http://example.com/index.cfm?p=contact
  3. http://example.com/contact.cfm
  4. http://example.com/ajax/contact-form.cfm
  5. http://example.com/index.cfm?p=contact.cfm
    如果我访问example.com/contact.cfm,它会被重定向到https://example.com/index.cfm?p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=index&p=contact,即使它是文件中唯一的规则,但以下是美化URL的代码:
<rule name="Prettify URL" stopProcessing="true">
  <match url="^(.+\/)?([^\/]+)$" />
  <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  </conditions>
  <action type="Rewrite" url="{R:1}index.cfm?p={R:2}" appendQueryString="false" />
</rule>

我错在哪里?谢谢!

3z6pesqy

3z6pesqy1#

试试这样的方法:

<rule name="don't allow direct access to .cfm pages" stopProcessing="true">
  <match url="^(?!ajax)(?!index\.cfm)(.*?).cfm.*$" />
  <action type="Redirect" redirectType="Permanent" url="index.cfm?p={R:1}" />
</rule>

此规则应将对任何.cfm页面(index.cfmajax文件夹中的页面除外)的请求重定向到所需的URL。
这里使用了正则表达式^(?!ajax)(?!index\.cfm)(.*?).cfm.*$。它使用负lookaheads来防止匹配任何以ajaxindex.cfm开头的内容。
regex101上演示。
我哪里做错了?
我不确定你的web.config的正确性,但是你的正则表达式是非常错误的。[^index]意味着没有字母index,例如。我建议阅读这篇answer来掌握一些正则表达式的理解。

相关问题