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