Apache-2.2

URL 查詢字元串導致佈局中斷

  • March 30, 2013

我有一個基於 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

由於我自己回答了這個問題,然後將其從我的問題中編輯出來,我將其作為“自己的答案”輸入。

添加以下內容解決了我的問題:

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

嘿@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
}

PS:我不擅長 .htaccess 文件規則我自己……

引用自:https://serverfault.com/questions/489045