Apache的重写条件而不是文件的行为

Apache的重写条件而不是文件的行为

问题描述:

我有基本的htaccess文件(-f!):Apache的重写条件而不是文件的行为

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA] 

它将按预期大部分。什么不工作,我想它是这样的:

我有这样的链接,不重写按以下规则:

http://domain.com/movies.php

而且这些URL被没有被改写之一:

http://domain.com/movies http://domain.com/movies/ http://domain.com/movies/fdgdgdgdg

这是正常的行为呢?我该如何解决这个问题,以便唯一的工作网址将结束与movies.php

+0

这很奇怪。你能举一个重写_does_工作的URL的例子吗?另外,您在哪些网址无效的情况下获得了什么? 404错误? –

+0

根据你的规则集,这个:http:// domain.com/movies/fdgdgdgdg被静默映射,例如:http://domain.com/rewrite.php?data =/movies/fdgdgdgdg',例如。 ¿你确定这就是你想要的吗?如果没有,请给出一些你想要的传入和映射URL的例子,从http:// domain.com/movies.php映射URL的例子开始。 –

+0

下面的答案解决我的问题,谢谢你试图帮助! – DominicM

我认为这是一个multiviews问题。与

停用多点视图
Options -MultiViews 
+0

就是这样!你能详细说一下这个选项吗?为什么这个选项在Linux共享主机上默认启用,但不是synology nas?似乎奇怪的是,它会在默认情况下在任何地方启用... – DominicM

+1

不知道为什么它由默认启用apache(不只是你的主机)。这是我在使用mod_rewrite时禁用的第一件事。 MultiViews的功能是当找不到文件时,查看是否有文件“接近”。因此,对于'/ movies'的请求,MultiViews会发现有一个基本名与请求相同的文件,所以它会提供'/ movies.php'。这是Content Negotiation如何工作的简短版本。更多信息请见http://httpd.apache.org/docs/2.2/content-negotiation.html – Gerben