2015-06-11 26 views
1

我想將所有404 url​​轉換爲搜索字符串。這是很容易添加此做404.php:將404 url​​轉換爲搜索

$search_term = substr($_SERVER['REQUEST_URI'],1); 
$search_404 = str_replace('/','+',$search_term); 
$search_404 = str_replace('-','+',$search_404); 
$location = "http://example.com/?s=" . $search_404; 
session_start(); 
$_SESSION['search_404'] = true; 
header("location: $location"); 

還應該有一定的消毒,但現在這不是問題的關鍵。

我想進一步的是沒有「?s =」,所以url保持不變,但搜索仍然有效。這可能/如何?

(我並不過於擔心SEO,因爲頁面是無論如何noindexed,但我不擔心與現有的網頁或安全漏洞的潛在衝突)

更新:顯然,這應該是如果WP簡單本身會使用搜索作爲最後的手段,當一切都失敗了,即如果沒有帖子,頁面,類別,標籤等與給定的網址,開始搜索查詢...有沒有辦法改變模板層次結構,以便搜索最後?

+1

...只是做htaccess 404重定向 – Dimi

+0

沒有嘗試過,但它結束了在重定向循環。這是我使用的代碼: 'RewriteCond%{QUERY_STRING} \\?s =([^&] +)[NC] RewriteRule^$ /%1 /? [NC,R,L]' –

回答

1

OK,它看起來像圍繞這一辦法就是置之不理搜索模板,使用非常404模板代替 - 這樣的:現在

$search_term = substr($_SERVER['REQUEST_URI'],1); 
$search_404 = str_replace('/','+',$search_term); 
$search_404 = str_replace('-','+',$search_404); 
$args=array('s'  => $search_404,); 
query_posts($args); 
if(have_posts()) { while (have_posts()) : the_post(); 
// WHATEVER 
endwhile; wp_reset_query(); } 

事情做這項工作。

如果可能存在任何衝突或安全漏洞,並且頁面仍然返回404,我仍然好奇。