如何使用重写规则强制调用“domain.tld/subdir/file.html”显示为“subdir.domain.tld/file.html”?
第一次海报。 mod_rewrite 非常新。我在共享服务器上,这个问题的背景是我的根帐户下的虚拟目录。
域 (domain.tld) 将具有代表静态 .html 文件的年度迷你站点的子目录。子目录名称 (yyyy) 将是 4 位数的年份(例如“2010”)。
我希望对 domain.tld/yyyy/file.html
的任何调用在浏览器地址栏中显示为 yyyy.domain.tld/file.html
,并且(当然)以使页面正确加载。
我已经通过使用……
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
RewriteRule (.*) http://domain.tld/$1 [R=301,L]
到目前为止一切顺利,强制删除了“www”。
但无论我之后尝试什么,我都无法将子域强制到域的前面。
这是我尝试过的更复杂的示例之一(毫无疑问是错误的)......
RewriteCond %{HTTP_HOST} ^domain\.tld/([0-9]+)/([a-z-]+)\.html [NC]
RewriteRule (.*) %1.domain.tld/%2.html [NC]
这不会破坏任何东西(我可以告诉),但它也没有达到我想要的效果。即,如果我输入 yyyy.domain.tld
,我会在地址栏中看到 yyyy.domain.tld
,并且四处导航将给出 yyyy。 domain.tld/file.html
等。很好。但如果还输入 domain.tld/yyyy
我会看到 domain.tld/yyyy
等,这不是我希望人们看到的方式。它不会重定向、屏蔽、别名或任何你所说的东西。
甚至有可能像这样强迫一个人看另一个人吗?我应该用 DNS 来处理这个问题吗?
提前致谢!
First time poster. Very new to mod_rewrite. I'm on a shared server and the context of this problem is with a virtual directory under my root account.
The domain (domain.tld) will have subdirectories representing annual mini-sites of static .html files. Subdirectory names (yyyy) will be the 4-digit year (e.g., "2010").
I want any call to domain.tld/yyyy/file.html
to appear as yyyy.domain.tld/file.html
in the browser address bar, and (of course) for the page to load properly.
I already force dropping “www” by using…
RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
RewriteRule (.*) http://domain.tld/$1 [R=301,L]
So far so good.
But no matter what I try after that, I can’t get the subdomain to force to the front of the domain.
Here’s one of the more complicated examples I’ve tried (no doubt wrong)…
RewriteCond %{HTTP_HOST} ^domain\.tld/([0-9]+)/([a-z-]+)\.html [NC]
RewriteRule (.*) %1.domain.tld/%2.html [NC]
This doesn’t break anything (that I can tell), but it doesn’t do what I want either. I.e., if I type yyyy.domain.tld
, I’ll see yyyy.domain.tld
in the address bar, and navigating around will give me yyyy.domain.tld/file.html
, etc. Fine. But if also type domain.tld/yyyy
I’ll see domain.tld/yyyy
, etc, which is not how I want people to see it. It doesn’t redirect or mask or alias or whatever you call it.
Is it even possible to force one look over the other like that? Should I be handling this with DNS instead?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
HTTP_HOST 仅包含 HTTP >主机值。所以试试这个:
HTTP_HOST does only contain the HTTP Host value. So try this: