将主域重定向到子目录

时间:2020-11-20 作者:stemon

按照下面的代码示例,我成功地重定向了它,但是浏览器上的站点URL显示为domain.com/subdirectory 而不是domain.com.

public\\u html根目录.htaccess

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subdirectory/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdirectory/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ subdirectory/index.html [L]
子目录.htaccess

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
# BEGIN LiteSpeed
# The directives (lines) between `BEGIN LiteSpeed` and `END LiteSpeed` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule Litespeed>
SetEnv noabort 1
</IfModule>
# END LiteSpeed

1 个回复
SO网友:MrWhite

从两个.htaccess 你发布的文件我根本看不到你的网站是如何工作的?!

如果您要求example.com/ (文档根目录)然后根目录中的第二条规则.htaccess 文件将请求直接重写为/subdirectory/index.html (不是index.php). 如果/subdirectory/index.html 存在,则提供(非WordPress)文件,否则请参见#2

如果您要求example.com/foo (其中foo 不映射到文件或目录),则根目录中的第一条规则.htaccess 文件内部将请求重写为/subdirectory/foo.

此时.htaccess 子目录中的文件将请求重写回/index.php 在文档根目录中(不是子目录)!这会导致404或非WordPress响应,或。。。您已手动创建index.php 在文档根目录中以某种方式启动WP?!

如何编写这些指令取决于文档中是否还有其他需要访问的(非WordPress)站点。然而,这也会改变您应该如何配置WordPress。

在本例中,我假设您只有域example.com, 在这种情况下,无需检查Host 收割台(RewriteCond 检查的指令HTTP_HOST).

如果您在子目录中只有WP站点,并且没有提供来自文档根目录的其他文件,并且您希望完全;隐藏(&Q);然后,您可以这样编写指令:

根目录/.htaccess:

RewriteEngine On

# Unconditionally rewrite everything to the subdirectory
RewriteRule (.*) subdirectory/$1 [L]
The.htaccess 子目录(下面)中的文件可防止重写循环。

/subdirectory/.htaccess

移除RewriteBase 指令,并删除RewriteRule 替换字符串:

# BEGIN WordPress
# :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
或(“WordPress方式”),硬编码/subdirectory:

# BEGIN WordPress
# :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subdirectory
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subdirectory/index.php [L]
</IfModule>
(TheRewriteBase 指令在上述内容中并不是必需的,但在WordPress教程中通常是这样表达的。)

然后,在设置下>;在WordPress中,您可以将;WordPress地址(URL)";(或WP_SITEURL 常量)和;网站地址(URL)";(或WP_HOME 常量)到站点根https://example.com (否/subdirectory).