mod-rewrite问题:/ test /方法被重写为test.svg / method

时间:2010-03-02 02:11:12

标签: apache mod-rewrite

我注意到发生了一件奇怪的事情(对我来说)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感到困惑,并希望了解这里发生了什么。

1 个答案:

答案 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应该足以让你看到发生了什么,但不要在生产服务器上使用它。