2011-10-04 96 views
2

我有一個搜索表單發送GET請求到一個名爲search.php的頁面。我已經在我的htaccess文件中重寫了一些規則,這些規則將某些事情(比如/ search)重寫到各自的頁面。我只是想採取search.php?q =查詢並將其重寫到/ search/query。簡單的htaccess重寫/重定向到搜索頁面

這是我的。

RewriteRule search.php?q=(.*) /search/$1 
RewriteRule search/(.*) search.php?q=$1 [nc] 

我在做什麼錯了?

下面是完整的文件

ErrorDocument 404 /index.php?p=404 

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^images/.*\.jpg$ /images/default.jpg [L] 

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?wghandcrafted.com/.*$ [NC] 
RewriteRule \.(gif|jpg|jpeg|psd|js|swf|flv|png)$ /feed/ [R=302] 

RewriteRule ^(products|blog|feed|search|checkout|checkout)$ $1.php [nc] 
RewriteRule products/cat/(.*)$ products.php?type=cat&cat=$1 [nc] 
RewriteRule products/(.*)$ products.php?type=single&product=$1 [nc] 
RewriteRule blog/(.*) blog.php&post=$1 [nc] 
RewriteRule feed/(.*) feed.phptype=$1 [nc] 

RewriteRule search\.php?q=(.*)$ /search/$1 [R=301,L] 
RewriteRule search/(.*)$ search.php?q=$1 [NC] 

回答

2

使第一線執行重定向和第二執行重寫

RewriteRule search\.php?q=(.*)$ /search/$1 [R=301,L] 
RewriteRule search/(.*)$ search.php?q=$1 [NC] 

並移動

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^images/.*\.jpg$ /images/default.jpg [L] 

到的結束一套規則。

否則,RewriteCond %{REQUEST_FILENAME} !-f規則是在任何其他事情之前制定的,這意味着只有對不存在文件的請求才會由該行下面的任何規則處理。由於有一個search.php文件,這可以防止達到該規則。

+0

仍然無法正常工作......任何其他建議?我將發佈我的完整.htaccess文件。 – watzon

+0

@ sun-tzu:看修改後的答案。 'RewriteCond%{REQUEST_FILENAME}!-f'行是您的問題,或者更具體地說,是放置。 –

+0

我很抱歉地說..但RewriteRule不能用這種方式查詢字符串 - 這不會工作'search \ .php?q =(。*)$'。 RewriteRule模式將只與URL的路徑部分匹配。即使它會......你極有可能得到一個重寫循環(這就是mod_rewrite和.htaccess的工作方式) – LazyOne

0

我遇到了同樣的問題,這裏有一個解決方案,我發現我的工作,我的網站上的查詢發送到index.php,我發現如果我有「^ index.php $/search /% 1?[R = 301]「作爲第一個重寫規則,因爲第二個重寫規則,它只是出錯,因此它只是進入一個循環,所以我用」^ $「替換了」^ index.php $「,允許它仍然請求相同的文件。這可能不是最好的解決方案,但是解決方法是有效的。這裏是我的工作代碼:

Options +FollowSymLinks 
RewriteEngine on  

RewriteCond %{QUERY_STRING} ^q=(.*)$ 
RewriteRule ^$ /search/%1? [R=301] 

RewriteBase /search 
RewriteRule ^search/(.*)$ /index.php?q=$1 [NC]