出于商业原因,我为Apache 2.2.22(mod_rewrite)创build了以下重写规则: RewriteRule /site/(\d+)/([^/]+)\.html /site/$2/$1 [R=301,L] 如果给出了这样的url: http: //www.mydomain.com/site/ 0999 / document.html 被翻译成: http : //www.mydomain.com/site/ document / 0999 .html 这是预期的情况。 但是,有名称只是数字的文件。 所以考虑下面的情况: http://www.mydomain.com/site/ 0055/0666 .html 获取翻译成: http://www.mydomain.com/site/ 0666/0055 .html 这也符合我的重写规则模式,所以我最终浏览器的“网页导致了太多的redirect”错误。 我研究了很长时间,没有find“好”的解决scheme。 我试过的东西: 使用[END]标志。 不幸的是我的Apache版本不可用,也不适用于redirect。 在RewriteCond子句上使用%{ENV:REDIRECT_STATUS}来结束重写过程(L)。 出于某种原因,%{ENV:REDIRECT_STATUS}在我尝试的所有时间都是空的。 如果我的规则匹配,添加一个带有Header子句的响应头,然后检查这个头( 详情请看这里 )。 似乎a)REDIRECT_addHeader为空b)标题不能明确地设置在301响应上。 还有另一种select。 我可以设置一个查询参数的redirectURL,这表明它来自redirect,但我不喜欢这个解决scheme,因为它似乎hacky。 有没有一种方法可以完成[END]标志的function,但是在旧的Apache版本中呢? 比如我的2.2.22。 谢谢!
当试图从apacheredirect一个URL: www.example.com 至 example.com 它redirect到 example.com// 这是一个单页的networking服务器,固定IP直接进入页面。 直接在httpd.conf上编辑 任何想法为什么会发生这种情况? RewriteEngine On RewriteCond %{HTTP_HOST} ^www.example.com [nocase] RewriteRule ^(.*) http://example.com/$1 [last,redirect=301]
我的客户正在接收他想停止的域名stream量。 我遇到的麻烦是,他们正在使用301redirect,我们的服务器只是看到来自访问者的正常networking命中。 日志中没有提到引用者,所以通过相对正常的mod_rewrite方法阻止他们将不起作用。 也不会再封锁主机服务器的IP,Apache中的stream量显示为来自标准访问者。 有没有其他方式阻止这种stream量? 来自另一个域名301的访问示例Apache输出: my_ip_here – [09 / Jun / 2011:18:01:49 +0100]“GET / HTTP / 1.0”200 14012“ – ”“Wget / 1.12(linux-gnu)”
我的nginxnetworking服务器不行,他应该怎么做。 所有到服务器的http://请求都应该使用http 301redirect到https://,过去几天工作正常,直到停止工作而没有任何改变。 Nginx返回一个types为“application / octet-stream”的空文件和下面的内容(在sublime中可读): 0000 1204 0000 0000 0000 0300 0000 8000 0400 0000 0000 0500 ffff ff00 0004 0800 0000 0000 7fff 0000 0000 0807 0000 0000 0000 0000 0000 0000 01 首先,我试图删除该行 default_type application/octet-stream; 从我的nginx.conf,但它没有帮助。 http-response头返回 Status: 我从http://到https://的301redirect的服务器块如下所示 server { listen 80; listen [::]:80; server_name my.tld www.my.tld; return 301 https://$server_name$request_uri; } […]
我有麻烦redirect(通过.htaccess)这样的url: www.url.com/index.php?option=com_content&task=view&id=60&Itemid=22 至 www2.url.com/something.htm 我发现问题是“旧”的URL。 一个“正常的”redirect(www.url.com/test.htm – > www2.url.com/something.htm)的效果很好。 我也尝试过重写,但找不到可行的解决scheme。 也许有人有想法如何解决我的问题? 非常感谢Lars。 仅供参考:服务器:Apache和我有完全的根访问服务器 编辑使用的重写规则: 我在.htaccess中使用重写规则尝试了以下内容 testing1: RewriteCond %{QUERY_STRING} option=com_content&task=view&id=63&Itemid=11 RewriteRule $ www2.url.com [R=301,L] 结果1:redirect到www2 url,但不仅限于www2.url.com。 它redirect到www2.url.com/option=com_content&task=view&id=63&Itemid=11 testing2: RewriteRule ^option=com_content&task=view&id=63&Itemid=11$ www2.url.com [R=301,L] 结果2:什么都没发生。 感谢您的提示:-)
我们的网站开发人员正在使用JavaScriptredirect – 首先这不适合search引擎优化,其次,它不保留http_referrer(因此它不会显示在我们的网站统计)。 所以我想在Apache中获得301redirect,但是我想确保引用者将被传递。 有谁知道如何保留在Apacheredirect301引用? 将一个301redirect与mod_rewrite默认保存引用者? 或者我需要使用mod_rewrite的一些自定义代码?
感谢您阅读我的问题。 我正在使用Debian5 + apache2 在apache2.conf中有多个VirtualHost部分。 我有一个主域www.mymain.com在虚拟主机部分和其他虚拟主机部分中的多个其他域。 稍后有一个redirect命令如下 redirect301 / http://www.mymain.com 所有的redirect工作正常。 我想login使用的原始域,但已尝试在http://httpd.apache.org/docs/2.3/mod/mod_log_config.html#formats的每个格式string无济于事。 我已经使用了所有的标准日志和我自己的自定义(all in)日志来pipe理这两个VirtualHost部分,并且所需的数据不会出现在任何日志文件的任何地方。 即用户点击连接到www.myotherdomain.com他们成功301redirect由Apache到www.mymain.com 我想看 等等等等www.myotherdomain.com等等等等 在日志中 任何input赞赏。 提示类似问题的人。 大多数浏览器caching301redirect。 一个蛮力的解决scheme是使用Firefox的可移植安装来testing(例如)。 做testing,然后删除并重新安装应用程序。 或者只要您想要进行testing,就复制原始安装的克隆。 注意在apache2.conf的serveralias命令中使用* .domain.tld 即使所有服务器名都是虚拟的,UseCanonicalName Off也适用 请记住,301redirect会生成2个完全独立的日志条目,因为它是2个完全独立的事件,即 browser requests www.myolddomain.tld -> server A returns 301 "command" and browser requests www.newdomain.tld (as listed in 301 cache) -> server B returns result 理论上服务器B可能根本不知道301发生了 当然,如果服务器A和B是相同的,那么能够将信息添加到服务器B的日志将是非常有用的。
我为自己的网站devise了自己的“最新消息”页面,并且试图保持URL的清洁。 (例如)它应该看起来像这样: http://www.domain.com/21/this-is-a-clean-url/ 当有人链接到文章,他们有时会搞砸,做: http://www.domain.com/21/this-is-a-clean-url/#random-hash-tag 所以我一直在做的是寻找“ http://www.domain.com/21 ”和301(移动permantly)redirect到正确的url+添加一个规范元标记。 这是否过度? 我是否应该使用(302发现)标题 – 只是让规范标签告诉search引擎什么适当的文章的URL是? 处理这个问题的最好方法是什么?
问题是,我们显然没有收到谷歌分析的任何跟踪。 我们有特定网站的X域名。 谷歌分析似乎只支持一个域名,除非你设置的链接和表单不是一个好主意。 我相信只有一个工作域,所有其他域将作为redirect工作会更好。 换句话说,我可以设置我的NGinx服务器将所有卫星域redirect到主域…或者直接编辑DNSredirect到主域。 我想知道哪种方式做redirect是最好的,如何。 我想我应该返回一个301消息错误。 另一方面,如果有办法简单地处理谷歌分析与所有的领域,这也将是伟大的。
好的,所以我在我的服务器上设置了URL重写(IIS 7),例如, http://example.org/p/1234/ 是真的 http://example.org/product/?product_id=1234 (使用/ product /包含能够处理查询参数的Web应用程序的索引文件)。 问题是,我想现在每个人都使用/p/1234/ url,所以我想每当有人访问/product/?product_id=1234的旧 url时发送301redirect, 但据我所知当发生URL重写时,就服务器而言,用户确实去了/product/?product_id=1234 。 虽然在浏览器的URL栏中可能会说http://example.org/p/1234/ ,当我做一个标题和CGIvariables的转储时, /p/1234/不会显示在任何variables中。 我想我的担心是,即使我能做到这一点,似乎也会让一个简单的请求变得相当复杂: 转到/p/1234/ 将其重写为/product/?product_id=1234 原来是/p/1234/ ? ( 是 ) 没做什么。 否则: 转到/product/?product_id=1234 原来是/p/1234/ ? ( 不 ) 301redirect到/p/1234/ 将其重写为/product/?product_id=1234 原来是/p/1234/ ? ( 是 ) 没做什么。 我知道,最终一些search索引将消除旧的URL赞成301redirect指定的那些,但在那之前,似乎有很多的服务器开销。 另外,如果我确实设置了,是否有一个filter,我可以在IIS中使用这样做,或者我需要将逻辑添加到我的webapp? 请注意,我为所有这些网页设置了<link rel="canonical"…/> ,但是我仍然看到旧格式显示在search结果中。