我有一个基于 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 规则来看),问题将是?anything
GET 参数不是预期的,所以 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]
(作者所言)