我有一个托管在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并重定向到静态服务器,这实际上比从动态内容服务器提供图像更糟糕.
我很难找到有关如何最好地处理带锚标记的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中包含此内容?或者可以通过其中一个变量获得?有关于此的文件吗?
(我也试过搜索"片段标识符","#""哈希""哈希标记")
我见过类似的问题,但似乎没有一个真正符合我现在遇到的问题......
我有 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&mgr=agm&agt=wsm&wnd=Connect Designer|defaultwindow&tpc=/robohelp/robo/server/en/projects/Connect Designer/Designer/{R:1}.htm&RINoLog28301=T&ctxid=&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 提供的页面时遇到问题,而我的浏览器没有问题怎么办?
我在Windows 2008R2 IIS 7环境中部署了.Net应用程序(使用Outsystems平台构建)。该应用程序已经可以正常使用了。它通过HTTPS在端口443上处理请求,我可以毫无问题地访问它。
现在,需要使一些用户能够通过NAT访问它,该NAT配置为在端口8200上处理请求。将请求毫无问题地转发到服务器,除非响应是重定向(HTTP 302)。在这些情况下,将使用为应用程序实际提供服务的端口(即端口443)设置响应的位置标头。当客户端的浏览器尝试访问在位置标头中设置的此URL时,它将失败,因为NAT仅在端口8200中处理请求。
总共:
https://myserver:8200/myapp;https://myserver:443/myapp;https://myserver:443/redirect;https://myserver:443/redirect;这是我试图做的;我在IIS中安装了URL重写模块并创建了以下规则:
https://myserver:8200)存储到服务器变量ORIGINAL_HOST 的入站规则。https://myserver:443/redirect)中发送的URL的主机部分替换为存储在我的服务器变量ORIGINAL_HOST中的值。该规则仅在重定向的情况下适用。我现在面临的问题是,一旦启用此规则,所有AJAX请求都将停止工作,即使该规则不适用于它们,甚至在没有通过NAT访问应用程序时也是如此。发生这种情况时,通过开发人员工具中的IE的“网络”选项卡,我可以看到请求标头和正文正常,响应标头正常,但是响应正文为空,不应如此。另外,如果我尝试使用断点在服务器上调试AJAX请求,则它不会在断点处停止。
因此,我的问题是:使用URL重写是解决NAT / URL问题的最佳方法吗?如果是这样,我该如何解决AJAX的情况?如果没有,那么我该如何解决重定向问题?
*编辑:这是我的规则配置:
先感谢您,
若昂·戈麦斯(JoãoGomes)
我有一个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 与应用程序请求路由一起用作在同一主机上运行的 Jenkins 实例的反向代理。主机正在运行 Windows Server 2016(服务器核心)。
Jenkins 在 localhost:8080 上运行,而默认 IIS 站点(我用作反向代理站点)在 10.0.0.84:80 我已经设法按照本教程进行URL 重写,但它不适用于 Jenkins ' CSRF 支持并将报告 403,由于“Crumb”不存在。
我假设我需要某种传出重写规则才能使其正常工作。我已经在互联网上搜索并没有找到其他人可以使用它。
正如标题所示,我正在使用以下命令配置反向代理功能的重写规则:
为此,我使用 Powershell DSC,在脚本资源中设置配置。这对于出站规则非常有效,但不会创建入站规则,也不会给出错误/警告。当尝试在其上设置属性时(在后面的 3 行),确实会显示一条警告,指出它找不到入站规则,顺便说一句,还显示了正确使用的变量名称)。在 IIS 管理控制台中它也是不可见的(是的,我已经使用了 F5)。
我使用的是 IIS 本身生成的命令,它与我在网上看到的所有命令相同,包括 StackOverflow。这个特殊问题不容易找到,所以我一定错过了一些非常微不足道的东西。我已经尝试过:
我让命令工作的唯一方法是在(提升的)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) 我有以下规则,将所有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。
这会导致调试和故障排除中的问题。是什么原因导致这种现象?
创建示例 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:
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /wwwroot/$1 …Run Code Online (Sandbox Code Playgroud) apache iis mod-rewrite url-rewrite-module blazor-webassembly
iis ×6
iis-7 ×3
.net ×1
anchor ×1
apache ×1
asp.net ×1
dsc ×1
hashtag ×1
iis-8 ×1
jenkins ×1
mod-rewrite ×1
nat ×1
outsystems ×1
powershell ×1
redirect ×1
server-core ×1
tomcat ×1