标签: url-rewriting

使用IIS7应用程序请求路由修改标头

我在Tomcat前面使用IIS7应用程序请求路由作为ISAPI重定向的替代.基本的反向代理功能运行良好,但我在最终请求标头中没有足够的信息.我的应用程序存在于几个子域:customerone.ourservice.com,customertwo.ourservice.com等.每个子域运行相同的应用程序,但具有不同的品牌图形.

应用程序当前查看Host标头以告知要显示的品牌.当我使用IIS7反向代理时,该信息将丢失.我的标题现在是:

accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
accept-encoding = gzip,deflate
accept-language = en-gb,en;q=0.7,en-us;q=0.3
cookie = JSESSIONID=......
host = 127.0.0.1:8080
max-forwards = 10
user-agent = Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
x-original-url = /
x-forwarded-for = [iis7ip]:47567
x-arr-log-id = affbf81c-a5cf-4212-a43b-901cd9adcee6
connection = Keep-Alive
Run Code Online (Sandbox Code Playgroud)

有什么办法可以将原始主机头插入反向代理传递的请求头中吗?

asp.net iis iis-7 url-rewriting arr

18
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC + IIS7 + FireFox:URL中的斜杠

注意:我已经花了几个小时挖掘答案,但找不到答案.

我有一个ASP.NET MVC(2.0)应用程序,托管在IIS7(集成模式)上.

当发出GET请求时/Toons/List- 我得到一个/Toons/List/预期的重定向(302).

问题
但是当我发送POST请求时,请说/Toons/Add(注意没有尾随斜杠)服务器再次返回,重定向(302)/Toons/Add/.此时,FireFox错误地将GET请求发送到该重定向到URL.即[GET] /Toons/Add/代替[POST] /Toons/Add/.这是不正确的,但已知的行为.由于没有[GET] /Toons/Add/- 我没有找到资源(404).

我使用webhost4life托管我的应用程序并且无法访问IIS7,这限制了我对URL重写和使用模块的使用(我正在与他们一起解决这个问题).但是ISAPI是最好的方式吗?我不知道这样做会感觉很好.

这是一个常见的问题,我很惊讶我找不到一个简单的解决方案.

是否存在不涉及使用.aspx/.mvc后缀和URL重写的解决方案?
在这两个中,如果必须的话,我应该选择哪一个?

有什么想法/建议吗?

编辑:
我已经阅读http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx,正如我所说,我正在努力寻找一个更简单的解决方案,一个"正常工作"选项.

编辑:
已经看到解决方案与/每个URL 附加斜杠(),再次,似乎不是最优雅的解决方案.

iis asp.net-mvc url-rewriting

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

无法使用URL重写出站规则更改IIS响应代码

我正在尝试设置IIS URL重写规则以匹配403响应,因为有人在禁用目录浏览时尝试浏览目录.我想然后将它们重定向到我为404定义的通常的ASP.NET自定义错误页面.

这就是我目前所拥有的:

<outboundRules>
  <!-- By default, browsing a directory with no default resource will return 403 -->
  <rule name="Directory browsing location">
    <match serverVariable="RESPONSE_LOCATION" pattern="(.*)" />
    <conditions>
      <add input="{RESPONSE_STATUS}" pattern="^403" />
    </conditions>
    <action type="Rewrite" value="/Error/PageNotFound?aspxerrorpath={PATH_INFO}"/>
  </rule>
  <rule name="Directory browsing status code" patternSyntax="ExactMatch">
    <match serverVariable="RESPONSE_STATUS" pattern="403" />
    <action type="Rewrite" value="302" />
  </rule>
</outboundRules>
Run Code Online (Sandbox Code Playgroud)

我的假设是它需要是一个出站规则,我需要重写状态代码并添加位置响应头,尽管后者在最初的403响应中不会存在.

目前的行为是......没有.无论我做多少调整,我仍然会看到403s.有什么想法吗?

顺便说一下,不,网站上没有任何合法的403可以被吞下.我还可以为可能导致满足条件的每个路径创建入站规则,但这不是很可扩展.

asp.net iis web-config url-rewriting url-rewrite-module

18
推荐指数
1
解决办法
6894
查看次数

带参数的Apache重写规则?

我有以下网址:

http://domain.com/index.php?m=feedback&cSubject=My Subject
Run Code Online (Sandbox Code Playgroud)

我想要一个重写规则,以便以下内容:

http://domain.com/feedback?Subject=My Subject
Run Code Online (Sandbox Code Playgroud)

映射到上一个URL.这是我目前的统治:

RewriteRule ^feedback?Subject=(.*)$ index.php?m=feedback&cSubject=$1
Run Code Online (Sandbox Code Playgroud)

似乎没有工作!有任何想法吗?

apache mod-rewrite url-rewriting

17
推荐指数
2
解决办法
3万
查看次数

ASP.NET MVC UrlHelper.GenerateUrl异常:"无法使用前导..退出顶级目录"

我正在使用IIS 7 Rewrite模块重写传入的URL,如:

HTTP://服务器/年/所有

HTTP://服务器/应用/控制器/年/所有

一切正常,除非在处理重写请求时,我使用MVC的UrlHelper.GenerateUrl()方法:

UrlHelper.GenerateUrl(
   "Assets",
   "Css",
   "Asset",
   new RouteValueDictionary(new { site = site.Name, assetPath = assetPath }),
   RouteTable.Routes,
   controllerContext.RequestContext,
   false);
Run Code Online (Sandbox Code Playgroud)

调用此方法会导致HttpException:

System.Web.HttpException: Cannot use a leading .. to exit above the top directory.
   at System.Web.Util.UrlPath.ReduceVirtualPath(String path)
   at System.Web.Util.UrlPath.Reduce(String path)
   at System.Web.VirtualPath.Combine(VirtualPath relativePath)
   at System.Web.VirtualPathUtility.Combine(String basePath, String relativePath)
   at System.Web.Mvc.PathHelpers.GenerateClientUrlInternal(HttpContextBase httpContext, String contentPath)
   at System.Web.Mvc.PathHelpers.GenerateClientUrl(HttpContextBase httpContext, String contentPath)
   at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
Run Code Online (Sandbox Code Playgroud)

查看RequestContext,似乎所有请求路径都是正确的(即,具有重写的值).我似乎无法弄清楚为什么它试图退出顶级目录...我们在路径中没有使用....

我还确保RewriteModule位于IIS中的UrlRouting模块之上.

虽然我可以进入框架方法,但我无法检查任何局部变量(在VS或WinDbg中),因为它已经过编译器优化.

有什么想法吗?

asp.net url-rewriting asp.net-mvc-2

17
推荐指数
2
解决办法
3920
查看次数

如何在URL中执行没有.php扩展名的PHP网页?

对不起noob问题,无法理解我应该搜索什么.

我正在制作一个product.php?id=777
我喜欢的网页product/777

谢谢!

php apache url-rewriting

17
推荐指数
3
解决办法
2万
查看次数

使用rewriteModule从页面中删除.aspx?

我正在使用ASP .NET rewriteModule将http://example.com重写为http://www.example.com.

<section name="rewriteModule" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
Run Code Online (Sandbox Code Playgroud)

然后我把它放在里面<system.webServer>.

    <rewrite>
        <rules>
            <rule name="Canonical" stopProcessing="true">
                <match url=".*"/>
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^([a-z]+[.]com)$"/>
                </conditions>
                <action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent"/>
            </rule>
        </rules>
    </rewrite>
Run Code Online (Sandbox Code Playgroud)

现在我想删除页面末尾的所有.aspx.例:

http://www.example.com/Register.aspx

将变成:

http://www.example.com/Register/

我怎样才能做到这一点?

我正在使用IIS7在GoDaddy上进行共享虚拟主机托管.

.net web-config url-rewriting

17
推荐指数
2
解决办法
2万
查看次数

如何控制NGINX'Location'指令匹配顺序?

我正在尝试优化我的"位置"指令,并且找不到确定是否尝试特定位置匹配的好方法.使用echo位置块内不帮助这里.

NGINX ngx_http_core_module文档有点令人困惑.

要使用正则表达式,必须使用前缀:

  1. ~ 区分大小写的匹配

  2. ~* 对于不区分大小写的匹配

如何进行比赛:

  1. 具有=与查询完全匹配的前缀的指令.如果找到,搜索停止.

  2. 所有剩余的指令与传统的字符串.如果此匹配使用^~前缀,则搜索停止.

  3. 正则表达式,按照在配置文件中定义的顺序.

  4. 如果#3产生匹配,则使用该结果.否则,使用#2的匹配.

这里的数字2表示"常规字符串",但后来说它可以与^~前缀一起使用.并不~意味着RegExp?如果没有,它如何确定什么不是RegExp?

具体来说,我想要以下内容:

  1. /assets直接提供任何文字.停止搜索.

  2. \.php$|/$通过快速CGI STOP SEARCH提供与RegExp匹配的任何内容.

  3. 通过文字直接提供其他所有内容 /

这样,只有/匹配尝试从资源外部提供的非动态文件.

我有:

location ^~ /assets {}      # search-terminating literal? or regex?
location ~ \.php$|/$ {}
location / {}               # is this match always attempted?
Run Code Online (Sandbox Code Playgroud)

从文档中,看起来实际的顺序是1-3-2,始终运行文字/匹配.是的,这种优化不会对实际性能产生任何影响,但我只是想澄清一些含糊之处.

nginx url-rewriting nginx-location

17
推荐指数
1
解决办法
2万
查看次数

.htaccess没有使用XAMPP在localhost上工作

即时通讯使用XAMPP但我无法在本地主机上使用.htaccess文件.我尝试了这么多次..在线工作不错.但本地主机显示[在此服务器上找不到请求的URL]

我的根文件夹是真实的

localhost/acre/real/property_available.php
localhost/acre/real/properties


<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /acre/real/
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^properties$ /property_available.php/$1 [NC,QSA]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

.htaccess mod-rewrite localhost url-rewriting

17
推荐指数
4
解决办法
11万
查看次数

Wordpress:在网址中包含语言变量

我一直在为wordpress开发一个完全有效的语言插件.现在唯一缺少的是网址重写.我一直在关注stackoverflow上的很多网站,资源和其他问题,但我似乎无法让我的永久链接工作.

我已经能够像这样添加一个查询字符串变量:

public function append_query_string($url) 
{
    $args = array('lang' => $this->get_locale());
    return add_query_arg($args, $url);
}
add_filter('page_link', array($this, 'append_query_string'));
add_filter('post_link', array($this, 'append_query_string'));
add_filter('the_permalink', array($this, 'append_query_string'));
Run Code Online (Sandbox Code Playgroud)

这会改变我的链接http://www.mylink.com?lang=en_us,例如.我现在想要的是添加一个permastruct,以便用户可以拥有漂亮的url(例如http://www.mylink.com/en/)

我添加了以下代码:

public function add_query_var($vars)
{
    $vars['lang'] = $this->get_locale();
    return $vars;
}
add_filter('request' , array($this, 'add_query_var'), 10, 2 );

public function custom_permastruct() 
{
    add_permastruct('language', '%lang%', false);
}
add_action('wp_loaded', array($this, 'custom_permastruct'));
Run Code Online (Sandbox Code Playgroud)

我现在唯一需要的是重写规则,我猜想,但我可能完全错了.谁知道添加这个permastruct的最佳解决方案是什么?

编辑 我一直试图让这个工作一个月,我似乎无法掌握永久链接,甚至没有所有以前的答案和我自己的研究.所以这就是为什么我再次以赏金来发布这篇文章的原因.我需要的是:我有一个返回语言代码的函数(get_locale).该语言代码应在我的URL中实现,如下所示:"http://www.mywebsite.com/LANGUAGE_HERE/..."

我知道我需要为此注册我自己的永久链接结构,但这就是一切都出错的地方.我需要什么过滤器以及我应该在过滤器功能中添加什么?非常感谢任何帮助,因为我在这里非常绝望.

编辑2

所以我添加了重写规则,但它们似乎也没有用.我在这里有点绝望.无论如何,这是重写规则的代码:

public function add_rewrite_rules()
{   
    $languages = $this->get_all_languages();
    foreach($languages as $language) {
        add_rewrite_rule('^' . $language->code . …
Run Code Online (Sandbox Code Playgroud)

wordpress permalinks url-rewriting

17
推荐指数
2
解决办法
2522
查看次数