RewriteEngine-如何忽略对已经存在的文件夹的请求

时间:2018-11-08 15:24:51

标签: .htaccess mod-rewrite

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

我几乎设法使它开始工作-到目前为止还很近...

这是我必须去的地方

RewriteEngine On     
RewriteRule    ^([A-Za-z0-9-]+)/?$    show_events.php?q=$1    [NC,L] 

它的工作原理是重定向到show_events.php页面,该页面在db中搜索完全匹配并在找到事件时显示该事件,否则它将重定向到搜索页面。我对此很满意。

问题是当文件夹(www.mysite.co.uk/test/)已经存在时,错误页面显示“此页面不起作用”。该文件夹仅包含一个显示单词“ hello”的HTML页面。如果您输入www.mysite.co.uk/test/index.html,则该页面会显示“确定”,因此就好像它无法正常工作。

我已经确定搜索页面可以正常工作,但是RewriteEngine代码无法正常工作。

这篇文章看起来可以解决我的问题,但不能完全解决: Apache RewriteEngine - Rewrite anything that not exists to index.php

我认为,通过在RewriteRule的末尾添加DPI可以解决问题,但不能解决问题。

我真的不了解RewriteEngine,只是在反复尝试中摸索着摸索,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您只需添加一个条件即可避免触摸现有文件夹

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

答案 1 :(得分:2)

问题在于您的规则还将现有目录重写为目标文件。您需要设置一个条件以从规则中排除目录:

df %>%
  filter(row_number() <= max(which(a > 0)))

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