URL 查询字符串导致布局中断

URL 查询字符串导致布局中断

我有一个基于 Apache 服务器的 Wordpress 站点,它可以将 URL 重写得更“漂亮”。

当我在 URL 中包含查询参数时,网站就会崩溃。

所以:

http://mysite.com

工作正常,但是:

http://mysite.com/?anything

没有...加载页面内容但无法加载我在主页上使用的某些插件。

如果你能解释为什么会发生这种情况,我很乐意听听。如果做不到,我只想完全删除查询参数,以便请求:

http://mysite.com/?anything

其行为将类似于以下请求:

http://mysite.com

可以通过重定向或者简单地删除查询字符串。

这是我当前的.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Handle redirection from https to http
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
# End https to http redirection

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

</IfModule>

# END WordPress

答案1

由于我自己回答了这个问题,然后这个问题被从我的问题中编辑掉了,所以我将把它作为“自己的答案”输入。

添加以下内容解决了我的问题:

RewriteCond %{THE_REQUEST} \?[^\ ]+
RewriteRule (.*) /$1? [R=301,L]

答案2

嘿@Lothar_Grimpsenbacher,

所以我认为这可能不是 .htaccess 的问题,可能是 WordPress 概念上的失误。我会尽量简单解释一下;

WordPress 有一些来自变量的 query_vars,如果您激活了“漂亮”的永久链接(从您的 .htaccess 规则来看),问题将是?anythingGET 参数不是预期的,所以 WordPress 可能会认为这是一个 404 的情况,具体取决于变量是什么。

据我所知,我不会为了解决这个简单的问题而弄乱 .htaccess 文件,因为这可能会给您以后带来严重的问题。

我认为解决您的问题的方法在于 WordPress 能够看到传递的变量是否有效,请查看以下解决方案:

function prefix_add_query_vars() {
    global $wp;
    $wp->add_query_var('anything');
}

add_filter('init', 'prefix_add_query_vars');

您可以在模板页面中检查如下值:

if ( get_query_var('anything') ) {
    //do your stuff
}

附言:我自己不太熟悉.htaccess 文件规则...

答案3

RewriteCond %{THE_REQUEST} \?[^\ ]+
RewriteRule (.*) /$1? [R=301,L]

(作者所言)

相关内容