Wordpress:if(url是example.com/sitemap)这样做......

时间:2010-01-26 15:47:44

标签: php wordpress query-string

以前,我一直在使用example.com?action=sitemap

创建我的站点地图页面

这使我可以轻松地在我的索引页面上测试一个带有...

的站点地图请求
$_REQUEST['action']

但是,我想使用example.com/sitemap

创建指向站点地图的链接

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

5 个答案:

答案 0 :(得分:1)

if (strpos($_SERVER['PHP_SELF'],'sitemap')===false) {
//sitemap not found in server string
} else { 
//sitemap found in server string
}

应该做的伎俩

答案 1 :(得分: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');

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

但是,您可能会发现使用此方法无法使用action访问$_REQUEST['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 :(得分:1)

我真的不知道Wordpress,所以我的答案将是框架/应用程序无关,但您可以使用mod_rewrite轻松实现此行为(尽管这意味着它已经在您的主机上启用,或者您具有配置编辑访问权限)。只需将其放在网络根目录的.htaccess文件中:

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

为什么不:$_SERVER$_REQUEST