2013-01-03 52 views
0

我有基本的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

回答

2

我認爲這是一個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