我在重写规则方面遇到了一些麻烦,谷歌搜索后无处可去。我有一个像这样的URL设置的标准重写:
RewriteRule ^services/(.*)/ /services/index.php?content=$1 [L]
网站使用content
的值来请求来自数据库的相关内容,但只是让网址看起来更漂亮;标准的东西。这在一定程度上起作用。例如,如果我的网址为/services/testimonials/
,则规则正常;内容被加载,页面正常显示。我通过某些网址看到的内容(例如/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冲突的文件,但在重写规则中有哪种方法我可以让它忽略它可能找到的同名文件?
答案 0 :(得分:6)
Options -MultiViews
这可以防止url映射到training.php。但是,它不会阻止/services/training.php
不映射,但这不是我认为的问题。