我想要的是如果用户输入: 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,只是在反复尝试中摸索着摸索,有人可以帮助我吗?
答案 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。