使用 .htaccess 将所有子域和子目录重定向到索引页面
Posted
技术标签:
【中文标题】使用 .htaccess 将所有子域和子目录重定向到索引页面【英文标题】:Redirect all subdomains and subdirectories to index page using .htaccess 【发布时间】:2020-11-15 13:50:45 【问题描述】:我有一个只有一个网页的Detroit ios & android Mobile App Development 网站:index.html。
本站源代码为here。
我不想显示 404 错误页面,而是想将用户重定向到 thefirstprototype.com,如果他们尝试去其他任何地方或尝试在之后放置任何内容。
例如:
mail.thefirstprototype.com 将用户带到 thefirstprototype.com thefirstprototype.com/mail 将用户带到 thefirstprototype.com我知道可以使用根文件夹中的.htaccess
来完成此操作,但我不确定如何操作。有很多教程展示了如何在不同域之间进行操作,但对我的具体情况没有任何帮助。我该怎么做?
谢谢
Edit1:请注意,我没有使用任何 CMS,例如 Wordpress。我只是普通的 FTP 来将静态 HTML、CSS、JS 网页推送到托管服务器
【问题讨论】:
【参考方案1】:尝试以下方法:
DirectoryIndex index.html
RewriteEngine On
# Redirect non-canonical hostnames (eg. mail)
RewriteCond %HTTP_HOST !^example\.com$
RewriteRule ^ http://example.com/ [R=302,L]
# Redirect 404 to root
RewriteRule ^index\.html$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . / [R=302,L]
但是,这是否捕获对 mail.
子域的请求将取决于该子域是否指向与您的主域相同的位置。 (对于 cPanel 共享主机,不一定如此。)
只有在您测试过它可以正常工作后才将 302(临时)重定向更改为 301 - 以避免与 301(永久)重定向相关的潜在缓存问题。
作为额外的奖励,您可以将任何对index.html
的直接请求重定向回根目录。例如,在上述两个规则块之间添加如下:
# Remove "index.html" if requested directly
RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteRule ^index\.html$ / [R=302,L]
检查REDIRECT_STATUS
环境变量的条件是确保我们不会出现重定向循环,因为mod_dir 在内部将请求重写为index.html
。
【讨论】:
我更新了我的答案只是为了添加一个优化(以防止在 mod_dir 重写 URL 后进行不必要的文件系统检查)并稍微整理一下代码(您不一定需要指定后续规则中替换字符串中的绝对 URL,因为这是在第一条规则中检查的。) 只是补充一下,如果您以后有任何添加更多页面的意图,最好将“重定向 404 到根目录”保留为 302(临时)重定向,因为 301 被永久缓存浏览器。以上是关于使用 .htaccess 将所有子域和子目录重定向到索引页面的主要内容,如果未能解决你的问题,请参考以下文章
使用 htaccess 将所有流量从根重定向到特定的子域页面