Apache重写规则无法正常工作

时间:2017-10-29 17:28:28

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

某些规则正常运行,并且所有内容都在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字符串名称的文件存在,它只会被重定向到该文件,并且不会应用重定向规则。

1 个答案:

答案 0 :(得分:1)

添加此项以禁用MultiViews:

Options -MultiViews

Apache docs on mod_negotiation描述了多视图选项启用时的功能:

  

如果   服务器接收/ some / dir / foo的请求和/ some / dir / foo没有   存在,然后服务器读取目录查找所有命名的文件   foo。*,并有效地伪造了一个类型地图,列出了所有这些   文件,为它们分配相同的媒体类型和内容编码   如果客户通过名字要求其中一个,那就会有。然后呢   选择与客户要求的最佳匹配,并返回   文档。

使用:

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