将\index.html重定向到\root

问题描述 投票:0回答:1

所以我有一个

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 redirect mod-rewrite url-rewriting
1个回答
0
投票

我已经在

.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实际上并不需要。

© www.soinside.com 2019 - 2024. All rights reserved.