我想只在设置了特定的查询字符串时才将一组url重写到另一个域。只需要重写主域url,url路径的其余部分需要保持不变,并且还需要删除查询字符串。
示例:
http://www.domain-a.com/post-type-a/post-title/?template=custom
应该重定向到:
http://www.domain-b.com/post-type-a/post-title/
和
http://www.domain-a.com/post-type-b/post-title/?template=custom
应该重定向到:
http://www.domain-b.com/post-type-b/post-title/
和
http://www.domain-a.com/post-type-c/post-title/?template=custom
应该重定向到:
http://www.domain-b.com/post-type-c/post-title/
等
查询字符串设置为加载不同的单帖模板,这样我就可以在我的express wordpress网站中创建一个微网站。但是我想在这个微型网站上使用我的其他域名,因此我的问题。
更新
如果我将这些行放在domain-b的根目录中的.htaccess中:
RewriteCond %{HTTP_HOST} domain-a\.com$ [NC]
Rewritecond %{QUERY_STRING} ^template=custom$ [NC]
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]
重定向确实有效,但我遇到了两个问题:
1)未加载正确的模板,因为在函数检测到之前,重写规则已经从查询字符串中取出。
2)由于其他重写规则,http://www.domain-b.com会更改回www.domain-a.com。
所以我认为我必须在我的wordpress函数中找到问题1的解决方案,而不是.htaccess。让我更好地解释一下我的情况:
我的主域名网站空间已在 domain-b 上注册。我的wordpress网站安装在博客文件夹中。我使用 domain-a 作为wordpress网址,因此 domain-b.com/blog / 会重定向到 domain-a 。 这工作正常,但如果查询字符串设置为 template = custom ,如上所述,我想对这些wordpress重写规则进行例外处理。在我的.htaccess文件中博客文件夹的根目录中,我有以下规则(由wordpress生成):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
这是我用来加载不同的单帖模板文件的函数:
// Add Query var
add_filter('query_vars', 'template_query_vars');
function template_query_vars( $query_vars ){
$query_vars[] = 'template';
return $query_vars;
}
// Switch template according to query parameter
add_filter( 'template_redirect', 'sjc_template' );
function sjc_template(){
global $wp_query;
if( $wp_query->get( 'template' ) ):
global $post;
$posttype = get_post_type($post->ID);
include( get_template_directory() . '/single-'. $posttype .'-custom.php' );
exit();
endif;
}
所以我尝试将重写规则放在那里,但那还不行(还):
// Set up the rewrite
add_action( 'init', 'template_setup_rewrites' );
function template_setup_rewrites() {
add_rewrite_rule('^/custom/?', '^/?template=custom', 'top');
flush_rewrite_rules(false);
}
对于问题2,我不得不对Wordpress生成的重写规则进行异常处理以保持域名...
对不起,如果它有点模糊,但解释起来很复杂。 感谢任何帮助!
由于
答案 0 :(得分:1)
将以下内容添加到站点根目录中的.htaccess
文件中。
RewriteEngine on
RewriteBase /
#if on www.domain-a.com
RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC]
#and qs contains template=custom
RewriteCond %{QUERY_STRING} ^template=custom$ [NC]
#redirect any request to domain-b
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]
唯一的主要更改是更改了^$
,这只会将主页与^
匹配,这将匹配任何请求
修改以回应评论
Options +FollowSymlinks
RewriteEngine On
#if the blog is only supposed to operate on domain-a, restrict it with thie condition
RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/.*$
RewriteRule ^(.*)$ /blog/$1 [L]
RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC]
RewriteCond %{QUERY_STRING} ^template=custom$ [NC]
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]