【问题标题】:Wordpress: if (url is example.com/sitemap) do this...Wordpress:如果(网址是 example.com/sitemap)这样做......
【发布时间】:2010-01-26 15:47:44
【问题描述】:

以前,我一直在使用 example.com?action=sitemap 创建我的站点地图页面

这让我可以轻松地在我的索引页面上测试站点地图请求...

$_REQUEST['action']

但是,我想使用example.com/sitemap 创建指向站点地图的链接

我想知道如何解析“/sitemap”外观的请求

【问题讨论】:

  • 您可以为此使用 htacces,并将 /sitemap “重定向”到 ?action=sitemap 但在 wordpress 中,最好创建一个名为 sitemap 的站点并选择您的站点地图模板来显示站点地图,我认为这更容易

标签: php wordpress query-string


【解决方案1】:

您可以在 Wordpress 中创建一个新的重写规则,如下所示:

function sitemap_rewrite($wp_rewrite) {
    $rules = array('sitemap' => 'index.php?action=sitemap');
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    return $wp_rewrite;
}
add_action('generate_rewrite_rules', 'sitemap_rewrite');

function flush_rewrite_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_filter('init', 'flush_rewrite_rules');

您应该只需要运行一次这些功能(例如安装主题时),因为重写规则存储在数据库中。

但是,您可能会发现使用此方法无法使用$_REQUEST['action'] 访问您的action 变量。要访问您的变量,您需要将其添加到 Wordpress 的 query_vars 数组中,如下所示:

function add_action_query_var($vars) {
    array_push($vars, 'action');
    return $vars;
}
add_filter('query_vars', 'add_action_query_var');

然后您可以使用get_query_var('action') 检索操作变量。

【讨论】:

  • 在我看来这是正确的答案,如果对他想要的有点矫枉过正。
【解决方案2】:
if (strpos($_SERVER['PHP_SELF'],'sitemap')===false) {
//sitemap not found in server string
} else { 
//sitemap found in server string
}

应该做的伎俩

【讨论】:

    【解决方案3】:

    我不太了解 Wordpress,所以我的回答与框架/应用程序无关,但您可以使用 mod_rewrite 轻松实现此行为(尽管这意味着它已经在您的主机上启用,或者您具有配置编辑权限)。只需将其放入 Web 根目录下的 .htaccess 文件即可:

    RewriteEngine On
    RewriteRule ^/sitemap$ /index.php?action=sitemap [QSA,L]
    

    如果您已经有一个带有RewriteEngine On 语句的.htaccess 文件,则可以安全地只在现有RewriteEngine 声明之后的任何位置包含第二行。

    它的作用基本上是告诉 apache 将 /sitemap 上的所有请求视为 /index.php?action=sitemap 上的请求。

    【讨论】:

    • 不过,也许如果他用 PHP 做这个,他可以避免 .htaccess。
    【解决方案4】:

    您可以尝试检查 PHPs $_SERVER["QUERY_STRING"] 变量的内容。它应该有你的/sitemap 部分,并且可能还有一些额外的参数。

    【讨论】:

    • 您的意思是$_SERVER['PATH_INFO']QUERY_STRING 条目用于? 字符之后的数据。
    • 我认为他误解了 action= 将不再存在。
    【解决方案5】:

    为什么不:$_SERVER$_REQUEST

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多