【问题标题】:Rewrite Rule finds directory and rewrites path as 'directory/?directory'重写规则找到目录并将路径重写为“目录/?目录”
【发布时间】:2013-01-30 17:58:47
【问题描述】:

我已经使用这个 Apache Rewrite Rule 有一段时间了,它通常会给我很好的结果:

RewriteRule ^([^\.]+)/?$ index.php?$1 [L]

当用户访问www.mysite.com/about-us时,服务器会显示来自www.mysite.com/index.php?about-us的内容。内容存储在数据库中,我使用查询字符串('about-us')搜索每个页面的内容。直到最近,这一切都很好。

我正在构建的新站点有一个目录(我们将其称为“文件夹”),它与我想要的查询字符串名称相同——也就是说,不是在 @987654324 中查找索引文件@ 目录,www.newsite.com/folder 应该通过 index.php 并使用“文件夹”作为搜索参数。相反,我得到了这个:

www.newsite.com/folder/?folder

我的代码将查询字符串解释为“文件夹/”。所以第一个问题是 URL 看起来很奇怪;第二个问题是我的页面存储时没有任何尾部斜杠。

当然,我可以在收到查询字符串后调整我的代码以去掉任何斜线,但这可能会使创建模拟文件夹结构的 URL(如 www.newsite.com/user/images/month)更具挑战性。而且它仍然无法摆脱我已经拥有的时髦 URL。

我怀疑有一个简单的解决方案可以让我的 URL 更漂亮,并防止服务器在我的目录中查找文件(除非用户明确要求提供 html 或 php 文件)。感谢您的意见。

【问题讨论】:

    标签: regex url mod-rewrite url-rewriting directory


    【解决方案1】:

    在“.htaccess”文件的开头添加“DirectorySlash Off”

    我遇到了同样的问题,发现了一个类似的帖子,它只是引用了 DirectorySlash 文档 (http://httpd.apache.org/docs/2.2/mod/mod_dir.html)

    【讨论】:

    • 谢谢!奇迹般有效。我会确保关闭 mod_autoindex。
    猜你喜欢
    • 2014-07-14
    • 2018-07-06
    • 1970-01-01
    • 2011-09-19
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多