繁体   English   中英

用QueryString重写Wordpress URL

[英]Wordpress URL Rewrite with QueryString

我只是开始WordPress体验。 我有一个网站使用开箱即用的WordPress搜索,并且据我所知是默认行为,它按照约定从请求中选择查询字符串s来执行实际搜索。

这意味着搜索后的URL看起来像domain/?s=whatever ,就搜索而言,它可以正常工作。

但是,我希望搜索页面拥有自己的URL,更像domain/search?s=whatever

我正在尝试使用URL重写来实现上述目的,并尝试了几种不同的htaccess配置,但似乎无法使其正常工作。

RewriteEngine On
RewriteBase /base_whatever
RewriteCond %{QUERY_STRING} ^s=(.*)$
RewriteRule search ?? [NC,L]

上面的配置是基准,我尝试过的替代方法是?? 包括以下内容:

  • / base_whatever
  • / base_whatever?s =%1

我敢肯定,以上内容对拥有Apache之类的经验的人来说似乎很有趣,但是到此为止。 我尝试了无数种不同甚至更尴尬的变化,但在我的情况下,所有这些变化都能产生404响应。

由于实际的搜索脚本(即我的search.php文件)位于我的WordPress主题文件夹中,因此我将test.php文件放在相同的位置,并且可以肯定的是,我可以将请求重定向到那个位置:

  • RewriteRule search /base_whatever/wp-content/themes/foo/test.php >成功

所以,我也尝试了我的search.php的完整路径,但这使WordPress成为了巴菲特:

  • RewriteRule search /base_whatever/wp-content/themes/foo/search.php >失败

WordPress似乎无法在这样的上下文中执行“内容包含内容”(功能不可用)。

htaccess ,我估计htaccess文件的其余部分是标准的WordPress / PHP内容,例如:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /base_whatever/index.php [L]

希望有一种简单的方法可以完成此基本任务,但是正如您所知,实现它有点困难。 我检查了几个关于该主题的博客,例如这个看起来很合理的博客,但仍然无法正常工作,所以男女生们能帮我个忙吗?

由于WordPress所做的大部分工作基本上是从数据库中存储的内容创建虚拟页面(即服务器上没有物理文件/页面,因此它在内部处理了很多重定向内容)。

因此,在htaccess中设置重写规则可能是一个令人头疼的情况。 幸运的是,WP API有许多用于进行重写的钩子。 在您的情况下,您需要使用''钩子。 以下内容应该对您有用,但相当简单,因此自定义它应该不是问题。

选项1:

add_action( 'template_redirect', 'so47156599' ) );

function so47156599() {

    if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
        wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
        exit();
    }

}

选项2:

另外,您可以看看API options

选项3:

基于.htaccess的选项可能是:

# search redirection
RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]

这应该将查询字符串中的所有内容减去所有多余的值,然后将它们转换为干净的工作URL。 您可能需要将其放置在默认的WordPress重写规则的上方(或下方),以使其正常工作。 (目前无法测试。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM