隐藏网址中的获取参数名称

时间:2018-09-17 13:09:01

标签: php wordpress mod-rewrite url-rewriting custom-pages

我知道可以使用重写引擎来完成此操作,但是我无法执行此操作 这是我的.htaccess文件

/* Extra small devices (phones, 600px and down) */
@media only screen and (max-width: 600px) {...} 

/* Small devices (portrait tablets and large phones, 600px and up) */
@media only screen and (min-width: 600px) {...} 

/* Medium devices (landscape tablets, 768px and up) */
@media only screen and (min-width: 768px) {...} 

/* Large devices (laptops/desktops, 992px and up) */
@media only screen and (min-width: 992px) {...} 

/* Extra large devices (large laptops and desktops, 1200px and up) */
@media only screen and (min-width: 1200px) {...}

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

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

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

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

尝试此代码,

<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>

谢谢!

答案 1 :(得分: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()命令的原因。

注释

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

原始答案

我认为您应该使用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

答案 2 :(得分: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')来获取我的参数值