2012-01-10 48 views
1

我需要防止第二個目錄深度或位置較深的字符串與第一個目錄深度規則匹配,並引發多域支持以產生額外混亂。除了這個問題,一切工作正常。我需要先澄清一下。高級Apache重寫:需要防止第二個+目錄深度中的字符串與第一個目錄深度匹配

有問題的頁面是當我在dir2或更深的URL的字符串'blog'(不帶引號)時,儘管我只希望它匹配dir1。

視覺目錄深度的...

本地主機/ example.com/DIR1/DIR2/DIR3/

我已經多域名支持,基本上是多個網站共用同一個模塊(模塊是博客/,論壇/,消息/等)。每個站點的目錄都在與模塊相同的目錄中(/ dir1/website1 /與dir1/blog /位於同一目錄中)。本質上,無論是訪問被重寫的模塊(博客/,forums /,messages /)還是模塊不匹配的模塊,都會被重寫爲主索引文件。

正在發生的事情是,...

管理/模板/博客

...是匹配......

博客/

我曾嘗試使用^ starts with操作符雖然問題在於由於多域支持,我必須跨兩個目錄來開始。

這裏是我當前的代碼...

RewriteEngine on 
RewriteRule .*/admin(.+) admin$1 [QSA] 
RewriteRule .*/blog(.+) blog$1 [QSA] 
RewriteCond %{REQUEST_URI} !.*(admin/|blog/) 
RewriteRule !\.(css|js)$ index.php 

但是博客模塊結束了重寫的index.php我可以刪除第二的博客/條件,最後一行。我在過去的幾個小時裏做了一些調整,但沒有取得任何成功,不幸的是,就我所知,多域支持在網上並不存在。

我知道這是一個棘手的設置,我會盡力澄清任何人有任何問題。

回答

1

據我所知,在你的RewriteRules開始時,你應該嘗試匹配多域名字符串,而不是過於籠統的.*匹配。

所以讓我們嘗試類似的東西:

RewriteRule ^[^/]*/admin(.+) admin$1 [QSA] 
RewriteRule ^[^/]*/blog(.+) blog$1 [QSA] 

[^/]意味着什麼這是不是「/」,並^[^/]*/foo手段與任何啓動不是斜線幾次,直到你到達斜線,然後FOO。因此,這應該是檢測'foo'僅僅是一級目錄名的有效方法,因爲域名中不允許使用'/'。

+0

這很好!萬分感謝!通過了投票並被接受爲答案。 – John 2012-01-10 17:52:55