【问题标题】:Redirect all subdomains and subdirectories to index page using .htaccess使用 .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 网页推送到托管服务器

【问题讨论】:

    标签: .htaccess redirect http-status-code-301 http-redirect


    【解决方案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 被永久缓存浏览器。
    猜你喜欢
    • 1970-01-01
    • 2017-03-08
    • 2016-02-19
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多