【发布时间】:2020-01-27 05:38:39
【问题描述】:
我对@987654321@ 和 RegEx 还是很陌生,对此感到非常沮丧,但我可能过于复杂了。基本上:
-
HTTP_HOST将是多个域之一,应按原样保留,包括子域,exceptwww.应始终删除 - 只有
domain1和'domain2' 有SSL,所以HTTPS应该被强制使用,但其他任何人都应该被强制使用HTTP - 如果域名后面的第一个子文件夹是
foo,则重写,使foo是子域而不是子文件夹。 - 之后,如果
foo.是子域:- 保留可见 URL 中所有丢失/禁止的文件夹/文件(稍后处理)
- 其中任何一个的实际页面位于
foo.*.com/index.php
-
foo子域上的缺失/禁止页面 not 仍应发送到根目录中的
\index.php,我目前正在这样做:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ /index.php [last,nocase]
我的尝试:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ $1 [L]
RewriteCond %{HTTP_HOST} domain1\.ca [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{HTTP_HOST} !domain1\.ca [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{REQUEST_URI} ^/foo.* [NC]
RewriteRule ^ %{REQUEST_SCHEME}://foo\.%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteRule "^/foo/(.+)" "%{REQUEST_SCHEME}://foo.%{HTTP_HOST}/$1" [L,NS,QSA,R=301]
一些例子:
incoming url: should become:
http://www.domain1.com/foo/blah => https://foo.domain1.com/blah
https://example.com/foo/blah.html => http://foo.example.com/blah.html
http://www.domain1.com/foo/index.php/foo => https://foo.domain1.com/foo
https://example.com/blah/blah.html => http://example.com/blah/blah.html
我希望这是有道理的(我不知所措,迟到了!)- 谢谢!
【问题讨论】:
-
“但任何其他人都应该强制使用 HTTP” - “来自”哪里?如果其中任何一个都没有有效的证书,那么您首先不会收到任何传入的 HTTPS 请求。
-
按原样保留主机名与 /foo 文件夹 -
https://bar.example.com/foo/blah.html会发生什么?还是这两种情况相互排斥? -
@04FS - 好主意;我不希望任何流量获得 that 的 url,但如果我必须选择,我宁愿放弃
bar.并将 url 显示为https://foo.example.com/blah.html(但仍显示实际内容来自index.html)。这有意义吗?
标签: .htaccess url redirect mod-rewrite traffic