1

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

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

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

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

任何人都可以帮忙吗?

4

3 回答 3

2

试试这个代码,

<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_])/([^/]*)$ /$1.php?url=$2 [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=$1 [L]

</IfModule>

谢谢!

于 2018-09-17T13:18:54.870 回答
0

更新的答案

要添加指向外部处理程序 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_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

于 2018-09-17T13:36:41.720 回答
0

最后这个解决方案对我有用我已经在我的主题文件夹中的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') 来获取我的参数值

于 2018-09-19T08:14:29.680 回答