JUMP TO EDIT8 TO SEE HOW I SOLVED THIS
假设我有一个WordPress博客:www.animals.com
。在主题目录中有一个特定的PHP文件:www.animals.com/wp-content/themes/mytheme/db.php
。此外,我还有一个自定义模板用于该页面,因此我在WordPress管理面板中创建一个新页面来显示db.php
:www.animals.com/database
。
所以如果我想阅读有关狮子的信息,我只需转到:www.animals.com/database/?animal=lion
(因为这是我决定编写PHP的方式,将$_GET ['animal']的值插入查询中,使用PDO等)。
现在,我想将www.animals.com/database/?animal=lion
访问为 www.animals.com/lion
。
我应该使用.htaccess还是WordPress Rewrite?我应该将我的.htaccess放在WordPress文件夹的根目录下(带有wp-config.php和那些文件),还是放在我的主题目录中?
根目录下的那个具有RewriteBase /
和默认的WordPress内容。要实现我想要的结果,我应该编写什么样的代码?我应该将其放在现有代码之前还是之后?
编辑:这是我的public_html .htaccess文件,这就是我想要做的事情:
我有一个网站:www.domain.com
,当您输入http://www.domain.com/dios/?dios=agni
时,它会向您显示有关众神Agni的信息。我想要键入www.domain.com/dioses/agni
来访问有关众神Agni的信息。PHP文件位于www.domain.com/wp-content/themes/smitespain/dios.php
它不工作x_x
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dioses/(\w*)$ dios/?dios=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
编辑2: 我正在使用多站点功能(请检查编辑4),而/database/ /dios/ 和 /dioses/ 不是我创建的实际文件夹,这只是我在WordPress中创建的页面名称。问题是现在它在选项卡标题中显示了神的名称 :S 这意味着变量 $_GET['dios'] 被设置了,但它没有加载文件(dios.php)= /
编辑3: 我需要访问特定的 domain.com/dios/?dios=agni,因为这是能够让 PHP 文件(dios.php) 调用 WordPress 的 get_header() 函数的URL,所以我无法直接访问该文件
编辑4: 我决定删除多站点功能
编辑5: 这些是我的 WordPress 页面:
domain.com/dioses/
对应 (www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor
对应 (www.domain.com/wp-content/themes/smitespain/dios.php)
编辑6: 我在 WordPress Codex 中阅读了一些内容,并意识到,如果我想访问 domain.com/dioses
,我可以通过访问 domain.com/index.php?pagename=dioses
或 domain.com/?pagename=dioses
来访问。
因此,我在 Rewritebase /
和下一个规则之间添加了以下内容:RewriteRule example/test ?pagename=dioses
然后, domain.com/example/test
会重定向到 domain.com/dioses
,但它也会更改地址栏中的 URL :(
问题是,如果我尝试这样做:RewriteRule example/test ?pagename=dios&dios=thor
它会将我发送到页面 'dios',但没有 '?dios=thor'
编辑7: 我开始使用 WordPress Rewrite,我将以下内容添加到我的主题的functions.php文件中:
function my_rewrite_rules() {
add_rewrite_rule(
'blah',
'index.php?pagename=dios&dios=agni',
'top'
);
}
add_action( 'init', 'my_rewrite_rules' );
再次强调..它加载了页面dios,但没有带上?dios=agni参数
编辑8: 最终,我设法让它工作了 =)
我需要知道的第一件事是,新的?dios=XXXX
将不再可用于$_GET ['dios']
,而是需要调用$wp_query->query_vars ['dios']
,因此我将其添加到了我的主题的functions.php文件中。
function add_query_vars($new_var) {
$new_var[] = "dios";
return $new_var;
}
add_filter('query_vars', 'add_query_vars');
function add_rewrite_rules($rules) {
$new_rules = array('([^/]+)' => 'index.php?pagename=dios&dios=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
我会确保$wp_query->query_vars['dios']
实际上已经设置好了
然后我只是添加了常规规则