我注意到发生了一件奇怪的事情(对我来说)mod_rewrite
。修复它对我来说并不重要,只要弄清楚发生了什么。基本上,我的文档根目录中有一个名为test.svg
的svg文件,以及index.php
。根据我的.htaccess
文件,我的期望是访问http://localhost/test.svg
会获得.svg
文件(确实如此),而访问http://localhost/test/action
会被重写为{{1} }}。相反,后者显然被重写为index.php/test/action
,因为我收到了消息
在此服务器上找不到请求的URL /test.svg/action。
这是我的test.svg/action
文件:
.htaccess
我在Ubuntu上使用Apache 2.2.12(通过# Turn on URL rewriting
RewriteEngine On
# Protect application and system files from being viewed
# RewriteRule ^(application|modules|system) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT,L]
安装)。我认为我的设置是相当标准的,但我不确定哪些指令或配置文件是相关的。我绝不是任何类型的系统管理员,我只是使用这个服务器在本地测试和开发。
正如我所说,解决这个问题是微不足道的,我常常被apt-get
感到困惑,并希望了解这里发生了什么。
答案 0 :(得分:2)
Apache的HTTP内容协商功能自动从“/ test”转换为“/test.svg”。见http://httpd.apache.org/docs/2.0/content-negotiation.html#multiviews
您可以使用指令禁用.htaccess中的内容协商:
Options -MultiViews
通过将这些指令添加到Apache配置中,您可以获得有关mod_rewrite正在执行的操作的更多信息(它们无法在.htaccess中使用):
RewriteLog /path/to/rewrite.log
RewriteLogLevel 3
RewriteLogLevel可以是从0(禁用)到9(非常详细)的任何数字。 3应该足以让你看到发生了什么,但不要在生产服务器上使用它。