【问题标题】:Configuring Apache to not rewrite URLs for FILE + SLASH将 Apache 配置为不重写 FILE + SLASH 的 URL
【发布时间】:2012-01-16 15:16:58
【问题描述】:

我有这个问题,所有的 URL 像 context/path/file/anything/that/follows 变成 context/path/file.php/anything/that/followscontext/path/file.xml/anything/that/follows

我有以下重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^service/(.*)$ service.php?xyz=1 [L,QSA]

应该将任何以service/... 开头的URL 映射到service.php。现在,问题是,如果名为 service.xml 的 XML 文件与 .htaccess 位于同一文件夹中,则 URL 将映射到该文件。如果存在 PHP 文件,它们会转到 PHP 文件。 XML 文件优先,即如果目录中同时存在 XML 文件和名称为 service.* 的 PHP 文件,则选择 XML 文件。

我在 Mac OS X 10.7 (Lion) 上安装了 PHP 5.3、Apache 2.x。这个问题我之前在 OS X 10.6 的时候没有出现过,所以苹果提供的配置肯定有一些变化。我就是不知道是什么。

有没有办法可以禁用这个功能

还是我完全偏离了轨道,做了一些愚蠢的事情?

顺便说一句,这与 mod_rewrite 无关,因为启用或禁用它,或者从 .htaccess 中删除重写规则会改变任何事情。即使 mod_rewrite 被禁用,URL service/my/parameter 仍然指向 service.xml/my/parameter

现在,我刚刚从 url 中取出查询字符串,并在 PHP 文件中手动解析它。但我知道这不是正确的做法。

【问题讨论】:

    标签: apache url configuration rewrite


    【解决方案1】:

    这似乎是启用了MultiViews 选项。

    尝试在<Directory> 部分(或.htaccess)中添加Options -MultiViews

    【讨论】:

    • 确实如此。万分感谢。我不知道MultiViews 选项。
    • 是的。一件很烦人的事情。如果您不需要内容协商,您也可以删除 mod_negociate
    • 我在 Mac 上的用户配置文件中有这个。我不确定我是否把它放在那里,或者它是否已经存在:“Options Indexes MultiViews”。我删除了 MultiViews 这个词,并修复了它。非常感谢!
    • 忘记投票了,因为当时我没有这样做的声誉:)
    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多