我在重写规则方面遇到了一点麻烦,在谷歌上搜索后,我一无所获。我有一个标准的URL设置重写如下:
RewriteRule ^services/(.*)/ /services/index.php?content=$1 [L]
该站点使用content
的值来向DB请求相关内容,但只是使URL看起来更漂亮;标准的东西。这在一定程度上起作用。例如,如果我的URL为/services/testimonials/
,则该规则运行良好;内容被加载并且页面正常显示。不过,我在一些URL(例如/services/training/
)中看到的是一个错误:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0 Fatal error: Unknown: Failed opening required 'redirect:/services/index.php' (include_path='[removed]') in Unknown on line 0
在谷歌上搜索了很多次之后(两者都没有什么进展),我发现如果我把URL改为/services/Training/
(注意大写的T),它就会起作用。这很快让我想到了URL中的冲突(事后我可能应该首先想到)。在检查了哪些URL有效,哪些无效后,我连接了这些点,发现被破坏的URL在与URL相同的子目录中有相同名称的文件。那句话令人费解。基本上我不能使用URL /services/training/
,因为有一个文件/services/training.php
会导致返回错误。
对此有一个明显的解决方案,那就是重命名与URL冲突的文件,但在重写规则中有没有一种方法可以让它忽略它可能找到的任何同名文件?
Options -MultiViews
这应该会阻止url映射到training.php。然而,这不会阻止/services/training.php
不映射,但我认为这不会成为问题。