多站点Wordpress,SSL和htaccess可以将子文件夹用作根目录

时间:2018-11-24 11:01:45

标签: php wordpress .htaccess ssl multisite

我有一个SSL证书,因此http-> https是必须的(作为预防措施)。我打算有多个子域,即subdomain1.example.com,subdomain2.example.com,目前有一个可以正常工作的子域。我使用的是多站点Wordpress安装程序,该安装程序(有目的地)安装在一个子文件夹中。多站点设置适用于其他语言。当前服务器文件夹的布局如下:

  • public_html
    • 后台
      • subdomain1(子域的文件夹)
    • 前台
      • wp-admin
      • wp-content
      • wp-includes
      • (其余WP文件)
    • index.php(测试文件,如果重定向设置正确,则不应加载)

当前,www.example.com / frontstage /可以打开WP主站点,这很好。我可以毫无问题地访问其wp-admin。 www.example.com/frontstage/en/会显示404页面,这不好。 www.example.com/frontstage/zh-CN/wp-admin/打开其他站点的仪表板。

我要保留从任何链接中删除index.php的功能(以保持链接的清洁)。

要配置两个“简单”的东西:

  1. 我想保持服务器文件夹的结构不变,但是要跳过“ frontstage”文件夹,以便在访问www.example.com时,将加载主要的WP网站(并且在某些情况下,将加载www。 example.com/frontstage/,它将重定向到www.example.com)。自然地,“转变”需要允许www.example.com/en/来打开辅助网站(可能跟随的任何其他语言网站)。理想情况下,无需重写WP网站中的所有链接。
  2. 当前/ en /站点未加载其根目录。演示文章和页面加载正常。

我当前在根目录下的.htaccess如下:

# disable index.php from urls

RewriteEngine On
RewriteBase /

<IfModule mod_rewrite.c>
    # redirect index.php requests
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

# force https and www

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

# move wordpress one level up

# allow subdomain

RewriteRule ^backstage\/subdomain1\/?(.*)$ "https\:\/\/subdomain1\.example\.com\/$1" [R=301,L]

对此的任何帮助都受到高度赞赏(我仍在学习htaccess的位和窍门,而这真的超出了我)。我在上面的代码中缺少什么才能正确处理?

1 个答案:

答案 0 :(得分:0)

当我在子文件夹中安装了WP后,我只需转到设置=>常规,然后通过删除子文件夹来更改网站URL。

此后,我将index.php文件上移一个文件夹级别,在您的情况下,将其更改为:

 require( dirname( __FILE__ ) . '/frontstage/wp-blog-header.php' );

这可以解决您的问题吗?

在此网站上找到如何将WP移至子目录的详细说明-您可以在以下网站https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory

上找到有关将Wordpress放入子目录的详细说明。

关于从http重定向到https的重定向-在.htaccess中可以这样做。在我看来,更好的是在apache上使用别名(通常应由托管者完成)。

区别:

htaccess重定向会先返回到用户,然后再返回到服务器,这会花费一些时间。据我所知,别名是在服务器上重定向的。

如果要强制使用https,则可以使用以下条目进行操作。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>