WordPress.htAccess重写自定义模板

时间:2014-05-15 作者:AlexanderR

我正在尝试将网站转换为WordPress。当前使用的URL的格式为:http://www.example.com/database/44/category/short-item-description.html

为了显示存储在数据库中的项目,我创建了一个页面模板DatabaseFetch。php和已在WordPress中添加了一个页面,以便在地址处使用此模板http://www.example.com/database/ (也可以通过http://www.example.com/index.php?p=39)

模板DatabaseFetch。php将使用php代码从URL中获取ID号,然后使用此ID号从数据库中获取相关项目的详细信息。

我正在试图改变。在WordPress根文件夹中找到htaccess文件,因为我希望所有URL的格式为http://www.example.com/database/44/category/short-item-description.html 待处理人http://www.example.com/database/ 但我希望浏览器以以下格式显示URLhttp://www.example.com/database/44/category/short-item-description.html (即URL不更改)

在过去的几天里,我尝试了很多组合,但都没有成功。使用该行:

RewriteRule ^/?database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$ /database/ [NC,L]
打开WordPress 404页面。

使用该行:

RewriteRule ^/?database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$ /?p=39 [NC,L]
显示正确的页面,但浏览器中的URL更改为http://www.example.com/database/有人知道我需要如何更改。htaccess下面的文件来获得我想要的结果?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# RewriteRule ^/?database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$  /database/ [NC,L]
RewriteRule ^/?database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$  /?p=39 [NC,L]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress
我还尝试了两行有标志和无标志以及标志的组合,但都没有得到想要的结果。在非Wordpress安装中,我通过中的一行定义了所需的结果。htaccess

RewriteRule ^/?database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$ database.php?id=$1 [NC,L]
WordPress的问题是,我需要的数据库页面不是物理DatabaseFetch。php文件。因此,我如何进行重写?任何帮助都将不胜感激。

2 个回复
最合适的回答,由SO网友:Milo 整理而成

不要使用。htaccess规则,使用WordPress内部重写系统。

首先,为您的ID添加一个查询变量:

function wpd_query_vars( $query_vars ){
    $query_vars[] = \'my_id\';
    return $query_vars;
}
add_filter(\'query_vars\', \'wpd_query_vars\');
然后添加一个内部规则来捕获传入请求,加载数据库页面,并设置ID查询变量:

function wpd_database_rewrites(){
    add_rewrite_rule(
        \'database/([0-9]+)/?([a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*).html$\',
        \'index.php?pagename=database&my_id=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_database_rewrites\' );
然后,您可以通过访问ID的值get_qury_var( \'my_id\' );

添加更多查询变量并通过$matches[2]$matches[3] 如果您还需要类别和标题。

SO网友:Edd Smith

您正在将网站转换为Wordpress,但您想从外部数据库获取数据?

让它以您描述的方式工作可能会非常困难。为什么不将其作为自定义帖子类型添加到Wordpress中呢。将旧网站的所有数据导入新的Wordpress网站,然后只执行301从旧URL重定向到新URL?

这将解决URL重写问题,如果您也这样做了,您还可以从Wordpress管理面板编辑内容。

结束

相关推荐