我在我的网络服务器上的/ blog /目录中安装了wordpress,因此Wordpress主页位于,例如http://www.example.com/blog/
我正在为内容管理创建一些自定义帖子类型。我希望“产品”自定义类型的网址为http://www.example.com/product/ ...并且“人员”自定义类型为http://www.example.com/people/ ...
现在服务器端这很简单。问题是让Wordpress生成(重写)永久链接,因此它们位于Wordpress安装/根目录(/ home / site / public_html / blog - > http://www.example.com/blog/)之下。
我可以通过使用PHP输出缓冲区来搜索n替换,以便将字符串“http://www.example.com/blog/product”替换为“http://www.example.com/product”,但这很麻烦,会耗尽很多更多内存。如果有正式或正确的非黑客方式,我宁愿这样做。
有谁知道怎么做?
答案 0 :(得分:0)
如果WordPress同时处理博客以及产品和人员的页面,您可能需要重新考虑文件夹结构。您仍然可以保留大部分WordPress(/blog/
子目录),并将其index.php
和.htaccess
文件移到根目录。请参阅Giving WordPress Its Own Directory: Using a pre-existing subdirectory install。
话虽这么说,如果你真的不想移动任何东西,那么你需要一个更复杂的程序化解决方案。为此,您需要使用WordPress Rewrite API。诀窍是使用其各种函数(add_rewrite_rule
,add_rewrite_tag
等)来创建WordPress将识别的一组规则,然后在您的网站的根目录中编写您自己的.htaccess
文件,在WordPress根文件夹上方。
所以,如果你做了这样的事......
<?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提供自己的目录。