标签: url-rewrite-module

IIS 7 URL重写规则未应用

我有一个托管在IIS7服务器上的.net 4.0 Web应用程序.

阅读本文后:http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/关于从另一台服务器提供静态内容,以便每次请求都不会发送cookie对于静态文件,我尝试了但没有太大的成功.

这是在web.config文件中编写的部分:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="images" stopProcessing="true">
                <match url="^images/(.*)$" />
                <action type="Rewrite" url="http://static-server.com/images/{R:1}" appendQueryString="true" logRewrittenUrl="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

定义此规则后,应将映像文件夹中文件的每个链接重写到静态服务器URL中.但这根本不起作用,现在images文件夹中的每个图像都返回404未找到的图像.任何可能导致此行为的想法,或者如何从不同服务器的特定文件夹中提供文件的不同解决方案,而不必通过大量代码并更改链接到静态服务器的所有链接?

我也尝试使用重定向操作类型而不是实际工作的重写操作,但它无法解释为什么我试图在不同的服务器上提供文件的原因(这种方式请求被发送到我的动态内容服务器所有必需的cookie并重定向到静态服务器,这实际上比从动态内容服务器提供图像更糟糕.

asp.net iis-7 url-rewriting url-rewrite-module

6
推荐指数
1
解决办法
2211
查看次数

IIS URL重写如何处理#锚标记

我很难找到有关如何最好地处理带锚标记的URL的任何信息,例如www.example.com/index.html#foo中的#foo

我们目前的情况是尝试使用Rewrite映射来获取带有锚标记的URL,但它正被另一个Rewrite映射所取代.

例如

 <add key="index.html#foo" value="bar1.html" />
 <add key="index.html" value="bar2.html" />

 <!-- A request to index.html#foo is being redirected to bar2.html, 
      not bar1.html as expected -->
Run Code Online (Sandbox Code Playgroud)

URL Rewrite是否在URL中包含此内容?或者可以通过其中一个变量获得?有关于此的文件吗?

(我也试过搜索"片段标识符","#""哈希""哈希标记")

iis anchor hashtag url-rewrite-module

6
推荐指数
1
解决办法
3309
查看次数

URL 重定向工作正常,但重写给出 404

我见过类似的问题,但似乎没有一个真正符合我现在遇到的问题......

我有 IIS7 url-rewrite-module,我正在尝试建立我认为是“简单”重写的内容。这是我正在使用的:

            <rule name="PPConnectDesigner" enabled="true" stopProcessing="true">
                <match url="^en/planetpress_connect_designer/(.*?).(html|htm)$" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="Rewrite" url="/robohelp/server?area=en&amp;mgr=agm&amp;agt=wsm&amp;wnd=Connect Designer|defaultwindow&amp;tpc=/robohelp/robo/server/en/projects/Connect Designer/Designer/{R:1}.htm&amp;RINoLog28301=T&amp;ctxid=&amp;project=Connect Designer" appendQueryString="true" logRewrittenUrl="false" />
            </rule>
Run Code Online (Sandbox Code Playgroud)

这给了我一个404错误,详细的错误信息有处理程序,StaticFile错误代码是0x80070002......但是,请求的 URL 是正确的,如果我只是从错误页面复制它并将其粘贴到另一个浏览器选项卡中,它工作正常。

另外,如果我将规则从 Rewrite 更改为 Redirect,它会完美运行!

附加信息

我意识到的一件事是,我确实有一些适用于重写的规则。而且,除了那些工作指向不是 html 的文件(我有一个 CSS 和一些 javascript)这一事实之外,只有一次非常明显的区别:那些不起作用的指向一个由 Tomcat 应用程序(特别是 RoboHelp 服务器)提供的 HTML 页面。我想知道这是否不是一个相关的点:如果 IIS 的重定向在查看由 tomcat 提供的页面时遇到问题,而我的浏览器没有问题怎么办?

iis-7 tomcat url-rewrite-module

5
推荐指数
1
解决办法
1283
查看次数

IIS 重定向和重写之间的区别(与重定向有关)

这个问题可能听起来很奇怪,但是给定一篇文章,绝对可以使用 rewrite 模块来执行重定向,就像使用重定向模块一样。两者都能够发出永久重定向 (301)。

有一个问题要求区别,但它谈到了用于纯粹重写而不是重定向的重写模块。另一篇文章清楚地说明了这一点,但似乎没有得到足够的答案。

因此,我的问题是:这些模块之间有什么区别?在重定向方面,哪个比另一个更受欢迎?

iis redirect url-rewrite-module

5
推荐指数
1
解决办法
5576
查看次数

在IIS上使用URL重写来设置响应的Location标头

我在Windows 2008R2 IIS 7环境中部署了.Net应用程序(使用Outsystems平台构建)。该应用程序已经可以正常使用了。它通过HTTPS在端口443上处理请求,我可以毫无问题地访问它。

现在,需要使一些用户能够通过NAT访问它,该NAT配置为在端口8200上处理请求。将请求毫无问题地转发到服务器,除非响应是重定向(HTTP 302)。在这些情况下,将使用为应用程序实际提供服务的端口(即端口443)设置响应的位置标头。当客户端的浏览器尝试访问在位置标头中设置的此URL时,它将失败,因为NAT仅在端口8200中处理请求。

总共:

  • 客户端浏览器访问https://myserver:8200/myapp;
  • NAT转换URL并转发到https://myserver:443/myapp;
  • 应用程序回复302重定向到https://myserver:443/redirect
  • 客户端浏览器访问https://myserver:443/redirect;
  • NAT会阻止此访问,因为它期望使用端口8200。

这是我试图做的;我在IIS中安装了URL重写模块并创建了以下规则:

  • 将请求的主机标头(在这种情况下为https://myserver:8200)存储到服务器变量ORIGINAL_HOST 的入站规则。
  • 出站规则将响应的位置标头(https://myserver:443/redirect)中发送的URL的主机部分替换为存储在我的服务器变量ORIGINAL_HOST中的值。该规则仅在重定向的情况下适用。

我现在面临的问题是,一旦启用此规则,所有AJAX请求都将停止工作,即使该规则不适用于它们,甚至在没有通过NAT访问应用程序时也是如此。发生这种情况时,通过开发人员工具中的IE的“网络”选项卡,我可以看到请求标头和正文正常,响应标头正常,但是响应正文为空,不应如此。另外,如果我尝试使用断点在服务器上调试AJAX请求,则它不会在断点处停止。

因此,我的问题是:使用URL重写是解决NAT / URL问题的最佳方法吗?如果是这样,我该如何解决AJAX的情况?如果没有,那么我该如何解决重定向问题?

*编辑:这是我的规则配置:

先感谢您,

若昂·戈麦斯(JoãoGomes)

.net iis-7 nat outsystems url-rewrite-module

5
推荐指数
1
解决办法
3634
查看次数

在哪里下载IIS 8的Web Farm Framework和外部缓存?

我有一个Windows Server 2012 R2标准版(基于x64的处理器),它有IIS 8.我需要在其上配置反向代理,它缺少URL Rewrite模块.根据我的阅读,URL Rewrite需要应用程序请求路由(ARR)模块,该模块本身也需要Web Farm Framework模块和外部缓存模块.

对于URL Rewrite,我可以从https://www.iis.net/downloads/microsoft/url-rewrite下载

对于ARR,我可以从https://www.iis.net/downloads/microsoft/application-request-routing下载

在哪里可以下载IIS 8的Web Farm Framework和外部缓存模块?我已经搜索过,到目前为止我发现的内容仅适用于IIS 7.5.

iis web-farm-framework url-rewrite-module iis-8

5
推荐指数
1
解决办法
5119
查看次数

具有 CSRF 保护的 Jenkins 的 IIS 反向代理

我正在尝试将 IIS 与应用程序请求路由一起用作在同一主机上运行的 Jenkins 实例的反向代理。主机正在运行 Windows Server 2016(服务器核心)。

Jenkins 在 localhost:8080 上运行,而默认 IIS 站点(我用作反向代理站点)在 10.0.0.84:80 我已经设法按照本教程进行URL 重写,但它不适用于 Jenkins ' CSRF 支持并将报告 403,由于“Crumb”不存在。

我假设我需要某种传出重写规则才能使其正常工作。我已经在互联网上搜索并没有找到其他人可以使用它。

iis reverse-proxy server-core jenkins url-rewrite-module

5
推荐指数
0
解决办法
677
查看次数

在 DSC 脚本中添加入站重写规则不起作用

正如标题所示,我正在使用以下命令配置反向代理功能的重写规则:

  • IIS 8.5
  • Windows Server 2012R2
  • URL重写2.1
  • 应用程序请求路由3.0
  • Powershell 5.1

为此,我使用 Powershell DSC,在脚本资源中设置配置。这对于出站规则非常有效,但不会创建入站规则,也不会给出错误/警告。当尝试在其上设置属性时(在后面的 3 行),确实会显示一条警告,指出它找不到入站规则,顺便说一句,还显示了正确使用的变量名称)。在 IIS 管理控制台中它也是不可见的(是的,我已经使用了 F5)。

我使用的是 IIS 本身生成的命令,它与我在网上看到的所有命令相同,包括 StackOverflow。这个特殊问题不容易找到,所以我一定错过了一些非常微不足道的东西。我已经尝试过:

  • 在不同的凭据下运行脚本
  • 使用硬编码名称而不是变量
  • 使用 URL 重写 2.0
  • 重新启动 IIS
  • 重新启动服务器

我让命令工作的唯一方法是在(提升的)Powershell(下面用 >>>> 标记)中将其作为单个命令执行。

然后是脚本本身。(作为参考,还添加了一条出站规则):

SetScript = {
            Write-Verbose "Checking if inbound rewrite rule is present..."

            $inbound = (Get-WebConfiguration -Filter "//System.webServer/rewrite/rules" -PSPath "IIS:\Sites\$using:frontendSiteName").Collection | Where-Object {$_.Name -eq "$using:inboundRuleName"}

            if($inbound -eq $null) {
                Write-Verbose "Inbound rewrite rule not present, configuring..."

        >>>>    Add-WebConfigurationProperty -Filter "//System.webServer/rewrite/rules" -Name "." -Value @{name=$using:inboundRuleName;stopProcessing="True"} -PSPath "IIS:\Sites\$using:frontendSiteName"
                Set-WebConfigurationProperty …
Run Code Online (Sandbox Code Playgroud)

iis powershell url-rewrite-module dsc

5
推荐指数
1
解决办法
1448
查看次数

IIS URL重写模块重复查询字符串

我有以下规则,将所有HTTP通信重定向到HTTPS:

<rewrite>
    <rules>
        <rule name="RedirectToHttps" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
            <match url="*" negate="false" />
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTPS}" pattern="off" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
        </rule>
    </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到它。

它对于没有查询字符串的简单URL很好用。但它会重复查询字符串。例如http://example.com/path?key=value变为https://example.com/path?key=value&key=value

这会导致调试和故障排除中的问题。是什么原因导致这种现象?

url-rewrite-module

5
推荐指数
1
解决办法
2169
查看次数

如何将 Blazor WebAssembly IIS 重写规则转换为 Apache mod_rewrite?

创建示例 Blazor WebAssembly 应用程序后,我将其部署到 IIS 和 Apache 以进行测试。

发布应用程序时,它生成了一个文件夹“wwwroot”和一个文件“web.config”:

在此输入图像描述

“wwwroot”文件夹包含整个应用程序:

在此输入图像描述

部署到 IIS 时,一切正常。

我目前正在努力解决的是部署到 Apache 的问题。

“web.config”文件包含两个重写规则。

规则1:

<rule name="Serve subdir">
    <match url=".*" />
    <action type="Rewrite" url="wwwroot\{R:0}" />
</rule>
Run Code Online (Sandbox Code Playgroud)

规则 2:

<rule name="SPA fallback routing" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="wwwroot\" />
</rule>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几件事来至少让规则 1 与 mod_rewrite 一起使用,例如:

RewriteEngine on
RewriteRule ^.*?$ /wwwroot [QSA]
Run Code Online (Sandbox Code Playgroud)

但我要么得到 404 要么无尽的重定向。

我的问题

如何将上述规则1和规则2转换为Apache mod_rewrite配置?


更新1

我确实认为这条规则可以有效替代规则 1:

RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /wwwroot/$1 …
Run Code Online (Sandbox Code Playgroud)

apache iis mod-rewrite url-rewrite-module blazor-webassembly

5
推荐指数
0
解决办法
408
查看次数