2013-11-03 118 views
0

我有一個國防部重寫我的.htaccess文件一對夫婦重寫條目:國防部重寫被跳過第一個匹配的規則

RewriteRule ^/services/(\w+)$ controllers/$1.php [L] 
RewriteRule ^.*$ index.html [L] 

每當我去http://blah.com/services/something它重定向我blah.com的,而指數比匹配第一條規則然後停止。

也:如果我改變最後的規則是:

RewriteRule ^(\w+)$ index.html [L] 

應用「的作品,」只是沒有當有第一/後的其他路徑。

這是怎麼發生的?

+0

如果在.htaccess中,你應該不使用前導'/'。只匹配'^ services/...' –

+0

由於它在目錄上下文中被解析,所以重寫引擎不會接收到作爲URI一部分的前導'/'。 –

+0

@MichaelBerkowski我拿出了領先/,它仍然重定向到索引 – Snowburnt

回答

0

此規則(RewriteRule ^.*$ index.html [L])過於籠統,將從htaccess文件調用時將所有內容重寫到您的索引頁。在從services/something重定向到services/controller/something.php之後,再次調用root htaccess,第一個規則不適用(沒有匹配),所以它轉到第二個匹配。

我能想到的3樣東西,可以幫助:

1)您是否嘗試過使用結束標誌?

RewriteRule ^/services/(\w+)$ controllers/$1.php [END] 

2)在您的services/controller目錄中放置一個htaccess,它會使您的根級htaccess無效。例如。與指令RewriteEngine off

3)使您的重定向到索引規則更具體通過使用RewriteCond指令列表。

+0

1和2都爲我工作。我試圖讓角HTML5路由工作,任何更具體似乎並沒有工作。 – Snowburnt