简单的htaccess重写/重定向到搜索页面


Simple htaccess rewrite/redirect to search page

我有一个搜索表单,它向一个名为search.php的页面发送GET请求。我在我的htaccess文件中设置了重写规则,将某些东西(如/search)重写到各自的页面。我只想取search。php?Q =query,重写为/search/query。

这是我的。

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]

让第一行执行重定向,第二行执行重写

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文件,因此这将防止达到该规则。

我遇到了同样的问题,这里是一个解决方案,我发现对我有用,在我的网站上的查询被发送到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]