所以我有一个
xxx.yyy.com
形式的子域,重定向到 yyy.com/xxx
除了子域的根目录是一个index.html 文件之外,一切正常。
我需要将
yyy.com/xxx/index.html
重定向到根目录 (yyy.com/xxx
)
我已经在
.htaccess
文件夹(/xxx
所在的位置)中使用 设置了
index.html
RewriteEngine on
RewriteCond %{THE_REQUEST} /index\.html? [NC]
RewriteRule ^(.*/)?index\.html?$ /$1 [R=301,L]
但似乎不起作用
我做错了什么吗?
xxx.yyy.com
重定向至 yyy.com/xxx
重定向是在根目录内进行的
.htaccess
with
RewriteCond %{HTTP_HOST} ^xxx\.yyy\.com$
RewriteRule ^$ https://yyy.com/xxx/? [L,R=301]
只保留
xxx.yyy.com
而不是重定向到 yyy.com/xxx
也很好,但那是另一个故事了
我已经在
文件夹(.htaccess
所在的位置)中使用/xxx
设置了index.html
RewriteEngine on RewriteCond %{THE_REQUEST} /index\.html? [NC] RewriteRule ^(.*/)?index\.html?$ /$1 [R=301,L]
您已经说过这根本不是“重定向”。然而,这个应该是重定向(尽管不正确*1)。这可能是因为子目录没有启用
.htaccess
覆盖(技术上可行,尽管我在 Cloudways 网站上找不到任何提及此限制的信息)。
*1 它应该(错误地)将
yyy.com/xxx/index.html
形式的请求重定向回 yyy.com/index.html
- 忽略 /xxx
子目录,因为在此上下文中 $1
反向引用为空。
但是,此规则不需要位于
yyy.com/xxx/.htaccess
文件中。事实上,这个特定的规则只有在文档根目录中(即在 yyy.com/.htaccess
处)才能正确工作。否则,此规则将从 URL 中删除子目录(.htaccess
文件所在的位置)。这是一条通用规则,可从任何 URL 末尾删除 index.html
(或 index.htm
)。
因此,您只需将此规则移至根
.htaccess
文件并完全删除 /xxx/.htaccess
文件即可。 (必须删除子目录.htaccess
中的mod_rewrite指令,否则根目录中的指令将不会被处理。)
因此,根目录中生成的
.htaccess
文件变为:
# /.htaccess (root)
# Redirect "xxx.yyy.com/" to "yyy.com/xxx/" (any query string is removed)
RewriteCond %{HTTP_HOST} ^xxx\.yyy\.com$
RewriteRule ^$ https://yyy.com/xxx/? [R=301,L]
# Redirect to remove "index.html" from the URL (any directory)
RewriteCond %{THE_REQUEST} /index\.html? [NC]
RewriteRule ^(.*/)?index\.html?$ /$1 [NC,R=301,L]
(并完全删除
/xxx/.htaccess
文件。)
我将
NC
标志添加到 RewriteRule
,因为您在前面的条件(RewriteCond
指令)中拥有它。 (将其放在条件上而不是规则本身是没有意义的。)但是,除非您有一个前端控制器模式将请求重写为 index.html
(文件后面),然后是前面的 condition实际上并不需要。