【问题标题】:Web.config Rewrite rule in some cases, otherwise leave originalWeb.config 在某些情况下重写规则,否则保持原样
【发布时间】:2021-07-22 14:03:01
【问题描述】:

有人能帮我写下基本上会这样写的重写规则吗:

如果 URL 中包含“siteA”,但仅当继续使用“wp-admin、wp-content 或 wp-includes”时,则删除“siteA”。在所有其他情况下,请在 URL 中保留“siteA”。

例如

domain.com/siteA/hello -> 保留 domain.com/siteA/hello

domain.com/siteA/wp-admin/some.css -> 重写为 domain.com/wp-admin/some.css

domain.com/siteA/wp-content/some.css -> 重写为 domain.com/wp-content/some.css

domain.com/siteA/wp-includes/some.css -> 重写为 domain.com/wp-includes/some.css

我尝试了几个选项,但我显然不擅长正则表达式和 url 重写;其中一种尝试:

        <rule name="Custom: remove subsite from resources paths">
          <match url="^siteA/(wp-(content|admin|includes).*)"/>
          <action type="Rewrite" url="{R:1}"/>
        </rule> 

也试过了

            <rule name="Custom: remove subsite from resources paths">
              <match url="^siteA/(wp-(content|admin|includes))/(*)"/>
              <action type="Rewrite" url="{R:2}{R:3}"/>
            </rule>     

还有

    <rule name="Custom: remove subsite from resources paths">
      <match url="^siteA/(wp-(content|admin|includes).*)"/>
      <action type="Rewrite" url="{R:2}{R:3}"/>
    </rule> 

这是我的完整规则节点(由 Wordpress 由于多站点而生成)。

所以事情是,它生成

domain.com/siteA/wp-includes/some.css

而不是

domain.com/wp-includes/some.css

所以当涉及到 wp-includes 等时,我需要丢失“siteA”。在其他情况下(常规帖子 domain.com/siteA/regularPost )应该保持原样。

    <rewrite>
        <rules>
            <rule name="WordPress Rule 1" stopProcessing="true">
                <match url="^index\.php$" ignoreCase="false" />
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 2" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
                <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
            </rule>
            <rule name="WordPress Rule 3" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                </conditions>
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 4" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
                <action type="Rewrite" url="{R:1}" />
            </rule>
            <rule name="WordPress Rule 5" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
                <action type="Rewrite" url="{R:2}" />
            </rule>
            <rule name="WordPress Rule 6" stopProcessing="true">
                <match url="." ignoreCase="false" />
                <action type="Rewrite" url="index.php" />
            </rule>                 
        </rules>
    </rewrite>

【问题讨论】:

  • 你试过&lt;action type="Redirect"吗?
  • 我不认为我的正则表达式匹配 url 参数,我的操作 url 参数很好..
  • regex101.com/r/m8EvzX/1,它似乎有效。
  • 那么为什么整个事情都不起作用呢?节点本身是否有问题(操作网址或其他东西?)顺便说一句,我按照您的建议尝试了重定向,同样的事情。
  • 在这个停止处理之前是否有任何其他规则被执行?

标签: regex iis url-rewriting web-config


【解决方案1】:

我不确定你想要什么。根据您的问题描述,您尝试的几个选项几乎达到了您的目标。我测试了它,它有一些问题。所以我改进它以重写siteA。

 <rule name="remove siteA">
                <match url="siteA/(wp-(content|admin|includes))/(.*)" />
                <action type="Rewrite" url="{R:1}/{R:3}" />
 </rule>

重写过程可以检查失败的请求跟踪。

【讨论】:

  • 相信你解决了问题(我粗略测试了一下,还需要再测试一下)。因为我不喜欢正则表达式,所以我不知道我在写什么,更像是 try-and-catch。
  • 其实这个 ^ 符号很混乱,因为有时它的意思是 NOT 有时是“以”开头
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2012-12-06
  • 2012-08-22
  • 2013-08-19
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多