.htaccess 重写引擎-如何忽略对已存在文件夹的请求

.htaccess 重写引擎-如何忽略对已存在文件夹的请求,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我想要的是,如果用户输入: www.mysite.com/test 这将重定向到一个页面,该页面将在my db中搜索名为test的事件,如果该事件存在,则显示事件else重定向到搜索页面 我几乎成功地让这个工作-如此接近,但到目前为止 这就是我要做的: RewriteEngine On RewriteRule ^([A-Za-z0-9-]+)/?$ show_events.php?q=$1 [NC,L] 它的工作原理是重定向到show_events.php页面,该

我想要的是,如果用户输入: www.mysite.com/test 这将重定向到一个页面,该页面将在my db中搜索名为test的事件,如果该事件存在,则显示事件else重定向到搜索页面

我几乎成功地让这个工作-如此接近,但到目前为止

这就是我要做的:

RewriteEngine On     
RewriteRule    ^([A-Za-z0-9-]+)/?$    show_events.php?q=$1    [NC,L] 
它的工作原理是重定向到show_events.php页面,该页面搜索数据库中的精确匹配项,如果找到匹配项,则显示事件,否则重定向到搜索页面。我对此非常满意

问题是,当文件夹www.mysite.co.uk/test/已经存在时,错误页面会显示此页面不工作。该文件夹只包含一个显示单词hello的HTML页面。如果您键入www.mysite.co.uk/test/index.html,页面将显示ok,这样就不会出现问题

我的结论是搜索页面可以正常工作,但重写引擎代码不行

这篇文章看起来可以解决我的问题,但不是很好:

我认为在规则末尾添加DPI可能会解决问题,但事实并非如此


我真的不懂重写引擎,我只是在黑暗中摸索着使用试错法,有人能帮我吗?

你可以简单地添加一个条件,以避免触及现有文件夹

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/?$ /show_events.php?q=$1 [NC,L] 

问题是,您的规则还将现有目录重写到目标文件。您需要设置从规则中排除目录的条件:

RewriteEngine On
RewriteCond ℅{REQUEST_FILENAME} !-d     
RewriteRule ^([A-Za-z0-9-]+)/?$    show_events.php?q=$1  [NC,L]
重写条件将阻止将现有目录重写到规则的目标url