我想让我的用户使用以下网址输入搜索查询:
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]
这不起作用 - 谁能告诉我我做错了什么?
答案 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还不太熟悉。他的工作是检查请求是文件还是目录,如果没有,则会进行搜索。
干杯!