Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 隐藏从URL获取参数的名称_Php_Wordpress_Mod Rewrite_Url Rewriting_Custom Pages - Fatal编程技术网

Php 隐藏从URL获取参数的名称

Php 隐藏从URL获取参数的名称,php,wordpress,mod-rewrite,url-rewriting,custom-pages,Php,Wordpress,Mod Rewrite,Url Rewriting,Custom Pages,我知道这可以用重写引擎完成,但我无法做到这一点 这是我的.htaccess文件 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L

我知道这可以用重写引擎完成,但我无法做到这一点 这是我的.htaccess文件

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
我有一个url www.mysite.com/report?page=我的报告名

现在我想知道的是:www.mysite.com/report/my-report-name

我访问这个get variable name页面的文件是reports.php,它不在我的根目录中 我的文件路径是:root/themes/fount/intel/reports.php

有人能帮忙吗?

试试这个代码


选项+FollowSymlinks
重新启动发动机
重写基/
#/anything/anything->anything.php?url=anything
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^([A-Za-z0-9)/([^/]*)$/$1.php?url=$2[L]

更新答案

要添加指向外部处理程序PHP文件的路由,应使用以下代码段:

function wprre_add_rewrite_rules() {
    global $wp_rewrite;

    // pattern with regexps
  $wp_rewrite->add_external_rule( '^wp_report/([\w\d-]+)/?', PATH_TO_THE_EXTERNAL_HANDLER.'report.php?report_name=$1' );
}
add_action('init', 'wprre_add_rewrite_rules');
您可以发现add_external_rule()和add_rewrite_规则在参数处理上的一个区别。您必须使用匹配选择器,就像Apache在本例中使用它一样

此代码段必须放在一个文件中,该文件始终由插件或主题加载。如果你写一个插件,它可以是主插件文件。在主题开发的情况下,它可以是main functions.php文件

自定义GET参数注册的工作方式与原始答案中提到的一样

重要的

通过代码(外部或内部)编辑重写规则后,必须转到“管理”面板中的“永久链接设置”页面,并单击“保存”按钮而不做任何更改。这是必要的,因为这将刷新重写规则,WP将把规则写入.htaccess文件

这就是为什么我建议您挂接插件激活事件并注册重写规则,然后立即运行flush_rewrite_rules()命令的原因

注释

原始答案的问题是,add_rewrite_rule()函数只有在路由到默认的basic index.php时才起作用。您只能修改参数,但不能路由到外部文件

原始答案

我认为您应该使用WordPressAPI来实现这一点。您需要使用以下语法在主题或插件中添加重写规则和标记:

!!免责声明这只适用于路由到basic index.php

对于路由,添加指向PHP文件的重写规则

function custom_rewrite_basic() {
  add_rewrite_rule('^report/([\w-]+)/?', 'index.php?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
如果要使用不在标准WP参数列表中的查询参数,则需要添加该自定义参数名称

function custom_rewrite_tag() {
  add_rewrite_tag('%page%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
如果不将其用作WP API,请注意使用内置参数

在本法典文章中,您可以找到有关该主题的更多详细信息:

为了进行故障排除和更深入的理解,您也可以查看这篇Codex文章,它描述了正确的重写规则用法。因为在某些情况下,您需要重置重写规则(插件激活/停用)。

这个解决方案终于对我起了作用
我已将其添加到主题文件夹中的functions.php文件中

    function rewrite_photo_url(){
add_rewrite_rule('^report/([^/]*)/?','index.php?page_id=2671&value=$matches[1]','top');
}
function register_custom_query_vars($query_vars){
    $query_vars[] = 'value';
    return $query_vars;
}


add_action('init','rewrite_photo_url');
add_filter('query_vars','register_custom_query_vars');

然后在我的php文件中,我使用get_query_var('vale')来获取我的参数值

我应该用我的.htaccess文件替换你的代码片段吗?是的。。。一旦您可以备份并替换.htaccess文件中的代码。“RewriteRule./index.php[L]”如果我从.htaccess文件中删除这一行,那么我的网站就不起作用了,但是你正在从.htaccess文件中删除这一行?我已经在下面的回答中发布了我的解决方案,最终对我起到了作用。谢谢。我应该在哪里使用这些功能?我可以在我的课堂上使用这些吗?或者我应该在我的report.php文件中使用它?这应该转到你的插件文件,或者如果你开发了一个主题,那么就转到functions.php文件。我已经在functions.php文件中添加了它,但它不起作用。请注意,这是我在wordpress模板中的自定义页面,文件名是reports.php,我获取$get['page']变量的文件是review-details.php文件函数custom_rewrite_basic(){add_rewrite_rule('^report/([\w-]+)/?,'reports.php?page=$matches[1],'top');}add action('init,'custom_rewrite_basic')); 我添加了这个函数reports.php是我的模板文件名,它位于functions.php isI修改我答案的同一目录中。我错误地使用了add_rewrite_rule()函数,因为它不能用于路由外部路径。但更新部分中的代码片段将起作用。你可以在这里找到一个演示插件,我给你写的:重要提示:每次修改重写规则后,转到永久链接设置页面,单击保存按钮刷新修改。祝你好运老实说,我不建议您在代码中硬编码ID,因为您无法在不修改代码的情况下将代码部署到不同的站点。但我不需要在不同的站点上部署此代码。我在我的站点上仅使用此代码一页。