Apache-2.2
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
由於我自己回答了這個問題,然後將其從我的問題中編輯出來,我將其作為“自己的答案”輸入。
添加以下內容解決了我的問題:
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 文件規則我自己……