【发布时间】:2013-05-15 21:36:01
【问题描述】:
跳转到 EDIT8 看看我是如何解决这个问题的
假设我有一个 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/lion 的身份访问www.animals.com/database/?animal=lion。
我应该使用 .htaccess 还是 Wordpress Rewrite?我应该将我的 .htaccess 放在 Wordpress 文件夹的根目录(带有 wp-config.php 和那些文件)还是我的主题目录中?
默认情况下,来自根的具有RewriteBase / 和来自 Wordpress 的东西。我应该写什么来实现我想要的?我应该把它放在现有代码之前还是之后?
编辑:这是我的 public_html .htaccess,这是我真正想要做的:
我有一个网站:www.domain.com,当你输入这个http://www.domain.com/dios/?dios=agni 时,它会显示关于烈火神的信息。我想输入www.domain.com/dioses/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
EDIT2:我正在使用多站点 (检查 EDIT4),而且 /database/ /dios/ 和 /dioses/ 再次不是 > 我创建的实际文件夹,这是我在 Wordpress 中创建的页面的名称。问题是,现在它在选项卡标题中显示了上帝的名字:S 这意味着变量 $_GET['dios'] 已设置,但它不加载文件(dios.php)=/
EDIT3:我需要专门访问 domain.com/dios/?dios=agni,因为这是允许 PHP 文件 (dios.php) 从 wordpress 加载 get_header() 的 URL ,所以我无法直接访问该文件
EDIT4:我决定删除多站点的东西
EDIT5:这些是我拥有的 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)
EDIT6:我正在阅读 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=thor' 的页面 'dios'
EDIT7:我开始使用 wordpress 重写,我将此添加到我的主题的 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
EDIT8:最后,我设法让它工作了 =)
我需要知道的第一件事是,新的?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'] 确实已设置
然后我只是添加常规规则
【问题讨论】:
-
+1 分享解决方案并详细说明。
-
谢谢老兄,你真的帮了我很多:D感谢你花时间在这个=)(我会给你+1,但我还有15个代表点xDDD)
标签: wordpress .htaccess url-rewriting