【问题标题】:RewriteEngine - How to ignore requests for folders that already existRewriteEngine - 如何忽略对已经存在的文件夹的请求
【发布时间】:2019-04-12 03:31:10
【问题描述】:

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

我几乎设法让它工作了 - 如此接近但到目前为止......

这是我要去的地方:

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 页面显示正常,所以它不是不起作用。

我已经得出结论,搜索页面可以正常工作,但 RewriteEngine 代码却不行。

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

我认为通过在 RewriteRule 的末尾添加 DPI 可能会解决问题,但事实并非如此。

我真的不了解 RewriteEngine,只是在黑暗中摸索,使用反复试验,有人可以帮助我吗?

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

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

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

    RewriteCondition 将防止您现有的目录被重写到规则的目标 url。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-29
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多