【发布时间】:2023-01-08 09:38:49
【问题描述】:
我有两个子域private、public(但public只是private的别名)和一个主要领域www。我需要将所有 URL 从 public 子域重定向到 www,除了现有的 PDF 文件和一个 URL 地址。我有这些工作正常的规则,但我无法为某个特定的 URL 添加例外。
例如。:
-
public.example.com=>www.example.com// 好的 -
public.example.com/any-existing-file.pdf=> 停留在public.example.com/any-existing-file.pdf// OK -
public.example.com/any-not-existing-file.pdf=>www.example.com// 好的 -
public.example.com/anything-except-certain-url-below=>www.example.com// 好的 -
public.example.com/certain-url=> 需要留在public.example.com/certain-url,但它被重定向到www.example.com// KO
我的.htaccess 文件中有这些规则。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^public\.example\.com$
RewriteRule ^$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^private\.example\.com
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ %{REQUEST_URI}/ [R=301,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/?$ ?page=$1 [QSA,L]
【问题讨论】:
-
您必须在此处使用其他一些规则,否则您会看到缓存从较早的(错误的)规则重定向。 301 由浏览器持久缓存(可能还有中间缓存)。您发布的规则只会将
public子目录的根目录重定向到 www.而已。这些规则不会将public.example.com/anything重定向到www。您是否在为您的静态资源提供服务的前端代理之后?这可以解释为什么public.example.com/any-existing-file.pdf没有被重定向。 -
不应该有任何其他规则。这是我的 .htaccess 的全部内容。在每次使用之前我都会清除缓存,所以它也不应该被缓存。关于最后一个问题,很遗憾我不知道。这是普通的虚拟主机,我没有任何特殊权利。
-
@MrWhite 所以请你根据我第一篇文章中的例子给我一些规则,哪些应该做我需要做的事情?我将用它们替换当前的,让我们看看它是否会起作用。
-
澄清一下,你只想重定向到 www 主页,原来的 URL 路径被删除了吗?
-
@MrWhite 是的,重定向后我不需要原始 url-path。