2011-10-04 2 views
2

search.php라는 페이지에 GET 요청을 보내는 검색 양식이 있습니다./htaccess 파일에서/검색과 같은 특정 내용을 각각의 페이지로 다시 작성하는 규칙을 다시 작성했습니다. 나는 단순히 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]