【问题标题】:Apache Rewrite Rule not working properlyApache 重写规则无法正常工作
【发布时间】:2017-10-29 17:28:27
【问题描述】:

一些规则可以正常工作,并且所有内容都在 conf 文件中正确设置,以允许重写正常工作。 但是有些规则失败了,或者可能是 URL 字符串没有达到该规则并且已经被重定向。

喜欢这条规则:

RewriteRule coach/(.*)$ coach.php?coach=$1

如果我调用 URL localhost/coach/fitness,它会被重定向到 localhost/coach.php,并且 PHP 文件中没有收到 GET 参数。

现在如果我把这条规则改成

RewriteRule coach/(.*)$ cp.php?coach=$1

并将文件名从我的目录中的coach.php 更改为cp.php 那么它对给定的 URL 工作得很好,并收到了 GET 参数。

所以问题是如果具有 URL 字符串名称的文件存在,它只会被重定向到该文件并且不应用重定向规则。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    添加此项以禁用多视图:

    Options -MultiViews
    

    Apache docs on mod_negotiation,描述了多视图选项在启用时的作用:

    如果 服务器收到对 /some/dir/foo 的请求,而 /some/dir/foo 没有 存在,然后服务器读取目录查找所有名为 foo.*,并有效地伪造了一个类型映射,其中命名了所有这些 文件,为它们分配相同的媒体类型和内容编码 如果客户按名字要求其中一个,就会有。那么它 选择最符合客户要求的匹配项,然后返回 文件。

    用途:

    Options -MultiViews
    RewriteRule coach/(.*)/?$ coach.php?coach=$1 [NC,L]
    

    【讨论】:

    • 请务必注意,mod_negotiation(即 MultiViews)在 mod_rewrite 之前处理 URL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2011-02-23
    • 2019-04-12
    相关资源
    最近更新 更多