我们的网站很快就会转为SSL,但我们还没准备好。因此,我们将在htaccess中将所有https URL重定向到http。我有这个工作,但作为一个额外的复杂性,我们有一些必须是重定向的例外的URL。这些网址是:
@model TestMVC.ViewModels.MediaViewModel
@foreach (var item in Model.Foo)
{
<p>@item.title</p>
<p>@item.ImagePath</p>
<p>@item.body</p>
<p>@item.description</p>
}
somebody.dev.www.example.com
example.com/top_deal
我的重定向工作如下:
example.com/watches
但无法使例外工作。我在网上找到了我能找到的所有解决方案。
答案 0 :(得分:0)
首先,您希望它是临时重写(= 302)还是浏览器应将其保存为<div class="table-responsive">
<table>
.....
</table>
</div>
因此得到permanent
?只是询问,两者都有效,但如果你想要暂时的,你应该阅读this
301
因此,在您的情况下, Excerpt: HTTP/1.1 (RFC 2616) added the new status codes 303 and 307
可能会更好。
如果您想要进行永久性重写,请使用307
使浏览器缓存重写目标,而不是每次都重写。
现在转到错误解决方案(但我留下了良好的原因,请参阅here) - DON&#39; T用那个!!!
[R=301]
<强>更新强>
这是真正应该放入配置的内容:
#logic is: 1 OR (2 AND 3) --> NO, it isn't, see the link right above!
#1 being hostname: somebody.dev.www.example.com
#2 being hostname: example.com
#3 being REQUEST_URI = !^/(top_deal|watches)
RewriteCond %{HTTP_HOST} ^somebody.dev.www.example.com$ [OR]
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} !^/(top_deal|watches)$
RewriteRule .? - [END]
##[END] makes the rewrite-evaluation STOP, completely, not only for this turn!
#same rule as before, just changed 302 -> 307 (RFC 2616) and ^(.*)$ to .? cuz I like it better^^
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule .? http://%{HTTP_HOST}%{REQUEST_URI} [L,R=307]
那绝对应该做的工作:)
如果由于某种原因没有,请搜索您的# Don't rewrite HOST 'somebody.dev.www.example.com'
RewriteCond %{HTTP_HOST} ^somebody.dev.www.example.com$
RewriteRule ^ - [END]
# Don't rewrite HOST 'example.com', if URI 'top_deal' OR 'watches'
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} ^/(top_deal|watches)$
RewriteRule ^ - [END]
RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=307]
并将LogLevel
添加到该行。因此,如果您的rewrite:traceX
为LogLevel
,则应该如下所示:
error
然后重新启动/重新加载服务器并再次测试。 Error.log现在将显示尝试重写的结果。使用LogLevel error rewrite:trace2
查找它们。如果不清楚,请告诉我们,也许我们可以提供帮助:)
答案 1 :(得分:0)
您可以使用规则作为第一条规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} !=somebody.dev.www.example.com
RewriteCond %{THE_REQUEST} !\s/+(?:top_deal|watches)/?[?\s] [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
# rest of your rules go here
确保在测试前清除浏览器缓存。
答案 2 :(得分:0)
我最终做的最终工作如下:
RewriteCond %{HTTP_HOST} !^(.*).dev.www.example.com
RewriteCond %{REQUEST_FILENAME} ! top_deal(.*)
RewriteCond %{REQUEST_FILENAME} ! watches(.*)
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule .? http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]