如果 WordPress 同时处理产品和人员的博客和页面,您可能需要重新考虑您的文件夹结构。您仍然可以将大部分 WordPress 保留在原处(/blog/
子目录),并将其index.php
和.htaccess
文件移至根目录。请参阅为 WordPress 提供自己的目录:使用预先存在的子目录安装。
话虽如此,如果您真的不想移动任何东西,那么您需要一个更复杂的编程解决方案。为此,您需要使用WordPress 重写 API。诀窍是使用它的各种功能(add_rewrite_rule
、add_rewrite_tag
等)创建一组 WordPress 可以识别的规则,然后将您自己的.htaccess
文件写入您网站的根目录中,位于 WordPress 根文件夹上方。
所以,如果你做了这样的事情……</p>
<?php
// Set up the higher-level (non-WordPress) rewrite rules
// so that you redirect non-WP requests to your own WP install.
function make_my_redirects () {
global $wp_rewrite;
add_rewrite_rule('^product/', '/blog/index.php?post_type=product', 'top');
add_rewrite_rule('^people/', '/blog/index.php?post_type=people', 'top');
// Save original values used by mod_rewrite_rules() for reference.
$wp_home = home_url(); // get the old home
update_option('home', '/'); // change to what you need
$wp_index = $wp_rewrite->index;
$wp_rewrite->index = 'blog/index.php';
// Then actually call generate the .htaccess file rules as a string.
$htaccess = $wp_rewrite->mod_rewrite_rules();
// and write the string outside the WordPress root.
file_put_contents(
trailingslashit(dirname(ABSPATH)) . '.htaccess',
$htaccess,
FILE_APPEND
);
// Don't forget to set the original values back. :)
$wp_rewrite->index = $wp_index;
update_option('home', $wp_home);
}
register_activation_hook(__FILE__, 'make_my_redirects');
…那么你的/home/site/public_html/.htaccess
文件中就会有这样的东西:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^product/ /blog/index.php?post_type=product [QSA,L]
RewriteRule ^people/ /blog/index.php?post_type=people [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
那么,有可能吗?是的,我猜。推荐吗?可能不是。:) 更容易给 WordPress 自己的目录。