模式不匹配时.htaccess条件重定向

时间:2009-12-11 00:59:53

标签: .htaccess mod-rewrite

我想让我的用户使用以下网址输入搜索查询:

www.domain.com/searchterm

或者带有这样的尾部斜杠:

www.domain.com/searchterm /

但是,我想捕获某些搜索词并将它们重定向到实际目录。例如,像这样的查询:

www.domain.com/css/site.css

实际上应指向CSS文件,不应将“css / site.css”作为搜索词传递。

这是我的非工作代码:

RewriteRule ^/(.+)/?$ /index.php?search=$1 [L]
RewriteRule ^/css/(.+)$ /css/$1 [L]

这不起作用 - 谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用像thia这样的脚本作为404页面,这将是一个更好的解决方案,而不是排除所有现有网址。在捕获404时,您仍然可以发送200响应,但至少它会使您的重写规则变得更容易。

或者,如果您真的想在没有404的情况下这样做,请使用此

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule .? /search_script [L]

答案 1 :(得分:0)

它不起作用,因为你的表达不好写。

首先,如果你翻转那两个它应该工作正常。其次,看看你的第一个RewriteRule。你的表达是^/(.+)/?$。基本上,它匹配ANYTHING直到字符串结束,只要它以/.//开始。

如果我正在处理此文件,我会将“搜索”RewriteRule移动到文件的末尾。它将被解释为最后一个,因此它的使用机会较少。

当我写这篇文章的时候,我看到了Rick的选择,这就是我要做的比我自己选择的更多。我对RewriteCond还不太熟悉。他的工作是检查请求是文件还是目录,如果没有,则会进行搜索。

干杯!