RewriteRule通配符子域保持url

时间:2018-01-13 14:40:19

标签: wordpress apache .htaccess mod-rewrite

在我的Wordpress实例中,每个用户都有一个公开个人资料,我试图进行动态网址重写,允许用他的昵称作为子域名来访问用户个人资料。

例如: username.example.com应显示页面example.com/membres/username/profile

username.example.com/foo应显示页面example.com/membres/username/profile/foo

www子域名是一个例外,应该重定向到主域名。 另外,我需要使用https。

我在虚拟主机和DNS中添加了*.example.com并获得了letsencrypt通配符证书。

以下是我在.htaccess中获得的内容:

RewriteEngine On
RewriteBase /
# www subdomain exception
RewriteCond %{HTTP_HOST} ^www.example\.com$
RewriteRule ^(.*)$ https://example.com [L,R=301]

# profile redirection
RewriteCond %{HTTP_HOST} ^([\w\d]+)\.example\.com$
RewriteRule ^(.*)$ http://example.com/membres/%1/profile/$1 [L,NC]

重定向的行为正是我需要的。 SSL也很好。

foo.mysite.com将我发送至https / example.com / membres / foo / profile

但我找不到像foo.example.com这样保留网址的正确方法!

我使用[P]标志尝试了一些示例,但此时我并不知道自己在做什么。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

要阻止外部网址重定向,您需要从目标网址中删除scheme(https :: //)和主机名。

# profile redirection
RewriteCond %{HTTP_HOST} ^([\w\d]+)\.example\.com$
RewriteCond %{REQUEST_URI} !^/membres [NC]
 RewriteRule ^(.*)$ /membres/%1/profile/$1 [L,NC]