对某些URL使用子域

时间:2015-03-24 作者:Cameron

我有以下规则。WordPress上的htaccess文件(单次安装):

# REWRITE FORUMS DOMAIN TO FOLDER
RewriteCond %{HTTP_HOST} ^forums\\.example\\.com$
RewriteRule !^forums/? forums%{REQUEST_URI} [NC,L]

# REWRITE FORUMS FOLDER TO SUBDOMAIN
RewriteCond %{THE_REQUEST} \\s/forums/([^\\s]*) [NC]
RewriteRule ^ http://forums.example.com/%1 [R=301,L]
这是因为http://example.com/forums 访问地址http://forums.example.com/

然而,服务器突然出现500服务器错误。。。

有什么办法吗?These rules work perfectly when used on non-wordpress sites... 第二条重写规则成功地将/论坛发送到子域,但子域似乎无法将数据正确地传递到WordPress中。”

整个htaccess文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# REWRITE FORUMS DOMAIN TO FOLDER
RewriteCond %{HTTP_HOST} ^forums\\.example\\.com$
RewriteRule !^forums/? forums%{REQUEST_URI} [NC,L]

# REWRITE FORUMS FOLDER TO SUBDOMAIN
RewriteCond %{THE_REQUEST} \\s/forums/([^\\s]*) [NC]
RewriteRule ^ http://forums.example.com/%1 [R=301,L]

# BEGIN WordPress
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>

The reason that the WordPress rules are after the forums rules are because if I put them after then they are never hit!

3 个回复
SO网友:Ciprian

尝试此操作(未测试):

# BEGIN Forums Rewrite
RewriteCond %{HTTP_HOST} !^www\\.domain.com
RewriteCond %{HTTP_HOST} ([^.]+)\\.domain.com
RewriteRule ^(.*)$ forums/%1
# END Forums Rewrite
它应该可以满足您的两个需求。您不需要第二个(将论坛文件夹重写为子域),因为重写实际论坛ID将覆盖基本子域重写forums.domain.com/forumid=16.

您应该在WordPress生成的行之后添加这些行。

SO网友:Mark Kaplun

这可能不是一件小事。您需要考虑wordpress需要url中的“论坛”目录才能成功检测到请求的内容是论坛帖子,而不是常规帖子或页面。因此,您需要更改REQUEST_URI 或者添加您自己的URL解析代码。

这种配置的阻力最小的途径可能是在自己的站点上安装并激活多站点论坛。在站点之间共享数据主题和插件来处理与url重写和解析相关的一切可能会更直接

SO网友:tutankhamun

我提供以下解决方案。需要在这行前面加上索引。php。

if (!empty($_SERVER[\'REDIRECT_URL\'])) {
    $_SERVER[\'REQUEST_URI\'] = $_SERVER[\'REDIRECT_URL\'];
}
我知道这是一个肮脏的黑客,但WordPress重写机制基于$_SERVER[\'REQUEST_URI\'] 价值

这些规则仅在以下链接上测试(与另一个域)http://example.com/forums/http://forums.example.com/如果在其他链接上不起作用,请告诉我。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# WordPress native stop rule
RewriteRule ^index\\.php$ - [L]

# prepend subdomain prefix
RewriteCond %{REQUEST_URI} !^/index\\.php$
RewriteCond %{HTTP_HOST} ^forums\\.example\\.coml$
RewriteRule !^forums/? forums%{REQUEST_URI} [NC,L]

# redirect to subdomain
RewriteCond %{HTTP_HOST} !^forums\\.example\\.com$
RewriteCond %{REQUEST_URI} ^/forums/(.*) [NC]
RewriteRule ^ http://forums.example.com/%1 [R=301,L]

# WordPress native rewrite with avoiding existing file- and dir- links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# avoid rewrite endless loop (to be on the safe side)
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
</IfModule>

结束

相关推荐

WordPress固定链接在Apache2 Ubuntu 14.04中不起作用

在我的本地机器中,wordpress permalinks不工作。经过研究,我发现wordpress没有创造。htaccess文件。为此,我遵循以下步骤。手动创建“.htaccess“将其归档并保存在WordPress主目录中。(这是一个包含wp admin、wp INCLUDE和wp content文件夹的目录。)转到Ubuntu终端并键入:sudo chown-v:www data“/文件路径/.htaccess”您应该看到打印出来的一行,表示(组)文件所有权已更改为www数据(Apache2)。为A