2012-07-11 46 views
0

我想重定向像所有的請求:mod_rewrite的規則打破,如果PHP文件被命名爲重寫模式

/xml/doSomething?arg=value 

要:

/xml.php?action=doSomething&arg=value 

我想這個簡單的規則:

RewriteEngine 
RewriteBase/
RewriteRule ^xml/([^/]+)[/]? xml.php?action=$1 [R=302,L,QSA] 

但它不起作用。 xml.php僅用於執行arg=value參數。問題在於那個名爲xml.php的文件是我規則的第一部分。事實上,如果我改變了規則:

RewriteRule ^asd/([^/]+)[/]? xml.php?action=$1 [R=302,L,QSA] 

我指出:

/asd/doSomething?arg=value 

我正確地重定向到:

/xml.php?action=doSomething&arg=value 

如何PHP文件的存在命名爲我的重寫模式的第一部分可以打破所有?

+0

根據你的規則,只有使用xml.php?arg = value才能執行文件xml.php。服務器上是否有其他規則?他們碰撞? – Stasik 2012-07-11 07:17:08

+0

@Stasik如果我沒有將* action *參數傳遞給'xml.php',PHP將被執行並且它什麼也不做;無論如何,我看不到'xml.php'行爲如何影響重寫引擎。而**沒有**,我沒有任何其他規則在服務器上;整個'.htaccess'就是我發佈的三條線。 – 2012-07-11 07:25:11

回答

0

我解決了。問題是我在我的虛擬主機配置中有Options MultiViews。我不知道這個選項:

多視圖搜索由MultiViews Options啓用。如果服務器收到請求/some/dir/foo/some/dir/foo存在,則服務器讀取的目錄尋找一個名爲foo.*

的所有文件,簡單地解釋了爲什麼我的規則不起作用。

+0

Yup IMO MultiViews在\ * \ * se中很痛苦,默認情況下應該禁用。 – TerryE 2012-07-11 10:11:22