这是一个关于 IPv4 子网的规范问题。
有关的:
子网划分是如何工作的,您是如何手动或在头脑中完成的? 有人可以从概念上和几个例子来解释吗?Server Fault 有很多子网划分作业问题,因此我们可以使用答案将它们指向 Server Fault 本身。
我有带有 mod_ssl 的 Apache 2.2 和一堆 HTTPS 站点,位于与 VirtualHosting 相同的 IP/端口上,因此客户端必须支持 SNI 才能连接到这些虚拟主机。
我想通过以下方式配置我的服务器:
当用户输入 www.dummysite.com 并且他的浏览器支持SNI(服务器名称指示)时,任何 HTTP 请求都会被重定向到https://发送 HSTS 标头的位置。但如果浏览器不支持SNI,则请求由 HTTP 提供。
上面的规则,按原样陈述,实际上是那些仍然运行旧浏览器的人的后备规则,因为 Mozilla 和 Chrome 没有这个问题,只是为了避免让这些用户离开网站。
我想在 Apache 配置级别执行此重定向,可能在用户代理上使用过滤器。我不想触摸正在运行的应用程序,除非确保不存在直接的 http:// 引用(否则它们意味着安全警告)
[编辑](在编辑问题时我忘记了问题):要重定向的启用 SNI 的用户代理列表是什么?
我正在尝试设置 Apache 反向代理,以便将请求代理到在 8080 上运行的另一个应用程序。但是,我希望直接提供某些目录而不是转发到代理。我想要的是:
http://localhost/ -> http:// localhost:8080/myapp
http:// localhost/images -> /var/www/html/images
http:// localhost/anything-else -> http:// localhost :8080/myapp/anyhthing-else
我目前的 httpd.conf 是
ProxyRequests Off
ProxyTimeout 600
ProxyPreserveHost On
ProxyPass / http:// localhost:8080/
ProxyPassReverse / http:// localhost:8080/
RewriteEngine On
RewriteRule ^/(.*) http:// localhost:8080/VirtualHostBase/http/%{SERVER_NAME}:80/myapp/VirtualHostRoot/$1 [L,P]
Run Code Online (Sandbox Code Playgroud)
我应该做什么配置才能使本地路径异常工作?
谢谢你,塔尼亚
如何使我的规则与 cookie 的确切值匹配?我试过了:
RewriteCond %{HTTP_COOKIE} ^its=me$ [NC]
RewriteCond %{HTTP_COOKIE} its=^me$ [NC]
RewriteCond %{HTTP_COOKIE} its="me" [NC]
RewriteCond %{HTTP_COOKIE} its=me [NC]
Run Code Online (Sandbox Code Playgroud)
最后一个几乎有效,但是当额外的文本位于值的末尾时匹配,例如“me2”。仅当itscookie 的确切值为 时me,条件才应为真,之前或之后没有更多内容。
这些值应不匹配:
有一些类似的问题,我试图从中找出答案,但到目前为止我一直没有成功。请告知我如何始终将 http 重定向到 https(并在此过程中从主机名中删除www.)。还有一个附带说明,最好在主 Apache conf 中执行此操作而不是.htaccess- 但我想这不适用于大多数人。
我已将此代码段添加到一个VirtualHost部分:
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
...但它在我访问时没有效果http://www.domain(它应该重定向到https://domain)
它没有效果,因为我没有使用RewriteEngine on- 所以它现在可以工作:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud) 这是一个关于在 Apache 中从 http 重定向到 https的规范问题
有关的:
我有符合两国的Appache Web服务器http://example.com/和https://example.com/。我想将所有 http 请求重定向到 https。目前我正在使用此.htaccess规则将 http 请求重定向到 https。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,example.com但相同的规则不适用于子链接,当我访问现有链接时,就像example.com/about它仍然会加载到 http 一样,现有链接不会发生重定向。
如何让 Apache 将所有 http 请求重定向到 https?
像这样的东西适用于索引页面:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com
</VirtualHost>
<VirtualHost *:80>
ServerName http://www.example.com
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
所以像这样的网址:
http://example.com gets forwarded to
http://www.example.com
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
http://example.com/robots.txt
Run Code Online (Sandbox Code Playgroud)
我还在 .htaccess 中尝试了以下内容,结果相同:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=permanent,L]
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题。
完整配置:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com
</VirtualHost>
<VirtualHost *:80>
ServerName http://www.example.com
ProxyPass / balancer://example/ stickysession=JSESSIONID|jsessionid
ProxyPassReverse / balancer://example/ stickysession=JSESSIONID|jsessionid
ProxyPreserveHost On
<Proxy balancer://example>
BalancerMember http://host1.example.com:8080/ route=tomcat1
BalancerMember http://host2.example.com:8080/ route=tomcat2 …Run Code Online (Sandbox Code Playgroud) 我们已经设置了一些子域,我想简化一些 apache 配置 - 特别是因为这些特定的子域是不稳定的。无论如何,我正在尝试获得包含主机的重写规则。
到目前为止,我有:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*).net.au$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%1.net.au$1 [R=302,L]
Run Code Online (Sandbox Code Playgroud)
这是基于/sf/ask/254387101/和http://httpd.apache.org/docs/2.4/rewrite/vhosts.html
然而,第一个条件中的模式没有写入重写的地址,我最终被发送到 .net.au/wherever(不允许我在前面发布 https) - 我错过了什么吗?
在 Ubuntu 14.04 上运行 apache 2.4
我有一个运行在端口 443 上的 Hudson/Jenkins 安装,因此我可以使用https://ci.mydomain.com. 我没有像 Apache Httpd 那样在端口 80 上运行的网络服务器,但我希望如果用户键入http://ci.mydomain.com
它应该重定向到https://...
我试过iptables:
/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 443
/sbin/iptables-save
chkconfig --level 35 iptables on
Run Code Online (Sandbox Code Playgroud)
但是浏览器告诉我,连接失败。所以我不想安装 Apache 网络服务器,我只想重定向http://ci.mydomain.com到https://ci.mydomain.com.
因此,在我的主域“domain.com”上,我从 cPanel 创建了几个子域,例如“sub1.domain.com”和“sub2.domain.com”。它们在服务器上的真实位置在“domain.com/sub1”和“domain.com/sub2”中。
现在,我想使用 .htaccess 将非 www 重定向到 www,这就是我目前拥有的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [L,R=301]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这有效。当有人输入 domain.com 时,它将被重定向到 www.domain.com。但是,当有人输入 sub1.domain.com 时,他将被重定向到 www.domain.com/sub1 - 我不想要它,它需要在 sub1.domain.com 中。
我应该在 .htaccess 文件中添加什么来完成这个?
apache-2.2 ×5
.htaccess ×3
http ×2
mod-rewrite ×2
redirect ×2
apache-2.4 ×1
https ×1
iptables ×1
ipv4 ×1
networking ×1
redirection ×1
rewrite ×1
rewritecond ×1
sni ×1
ssl ×1
subdomain ×1
subnet ×1
tcpip ×1
virtualhost ×1