隐藏 URL 中的获取参数名称

Hide get parameters names from the URL

我知道这可以使用重写引擎来完成,但我做不到 这是我的 .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

我有这个 url www.mysite.com/report?page=my-report-name

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

我访问此获取变量名称页面的文件是 reports.php,它不在我的根目录中 我的文件路径是:root/themes/fount/intel/reports.php

有人可以帮忙吗?

试试这个代码,

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /

# /anything/anything -> anything.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9_])/([^/]*)$ /.php?url= [L]

</IfModule>

如果 page.php 文件名总是相同的,那么这样做:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /

# /page/anything -> page.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ /page.php?url= [L]

</IfModule>

谢谢!

更新答案

要添加指向外部处理程序 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=' );
}
add_action('init', 'wprre_add_rewrite_rules');

您可以发现 add_external_rule() 和 add_rewrite_rule 之间的参数处理差异。在这种情况下,您必须使用匹配选择器,因为 Apache 使用它。

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

自定义 GET 参数注册工作正常,正如原始答案中提到的那样。

重要

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

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

注释

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

原回答

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

!!免责声明这仅适用于路由到基本 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 文章中,您可以找到有关该主题的更多详细信息: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

为了进行故障排除和深入了解,您还可以查看这篇 Codex 文章,其中描述了正确的重写规则用法。因为在某些情况下您需要重置重写规则(插件激活/停用)。 https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

最后这个解决方案对我有用 我已将其添加到我的 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') 来获取我的参数值