大家好。 我在网站上做一个简单的仪表板,我已经设置了一个非常简单的htaccess来处理一些URL:
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#routing:
RewriteRule ^login/?$ login.php [L]
RewriteRule ^page/([0-9]+)/?$ /index.php?page=$1 [QSA,NC,L]
#errors:
ErrorDocument 404 /404.php
据我所知,这应该很简单,但是:
/ page / 1234 URL正常运行(以及使用的其他任何数字,因此该模式有效)。
进入www.example.com/login或www.example.com/login/导致:
1)如果“ errorDocument”行位于所有内容的顶部,则太多的重定向错误 2)如果“ errorDocument”位于htaccess的底部,则/404.php重定向。
同时,我可以直接访问/login.php。
我已经进行了一些测试,但是我可以找出问题所在,并且还使用this tool测试了文件:
答案 0 :(得分:2)
将我的评论转换为答案。
好像您打开了MultiViews
选项并得到了这种意外行为。
Options -MultiViews
选项MultiViews
(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation module
使用,该选项运行之前 mod_rewrite
,并使Apache服务器匹配文件扩展名。因此,如果/file
是URL,那么Apache将尝试解析它并提供/file.php
。