2013-08-06 48 views
1

我有兩個不同的事情,我想在兩種不同類型的URI的情況發生,但我似乎無法從執行在第一種情況下已經被接受停止第二種情況。的htaccess的RewriteCond REQUEST_URI檢測工作不

下面是一個例子:

abc.com 
abc.com/asdf 
abc.com/en/asdf 
abc.com/zh-cn/asdf/asdf 

都應該被引導到這個重寫規則:

RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

第2部分:

abc.com/myadmin/ 
abc.com/myadmin/asdf 
abc.com/myadmin/en/asdf 
abc.com/myadmin/zh-cn/asdf/asdf 

都應該被引導到這個重寫規則:

RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?lng=$1&tpl=$4 [QSA,L,NC] 

我一直在試圖達致這的方法是通過堆疊這樣的條件:

RewriteCond %{REQUEST_URI} !^/myadmin/ 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_URI} ^/myadmin/ 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

但無論我做什麼,無論是規則還是執行。也許我這樣做是正確的和次級執行在PHP模板進一步向下發生,我不知道。我只需要知道我迄今爲止所做的工作是否看起來不錯,全部都是。

回答

0

好吧,我發現這個問題,這部分是我的假定清除緩存擴展名爲n的我的Chrome瀏覽器只曾在一次一個標籤,並在擴展自動重新加載所有選項卡擴展激活後默認設置上。

與大多數開發人員一樣,在開發訪問我的網站,開發工具和技術資源的測試區域的任何特定時刻,我都會在瀏覽器中打開5-10個選項卡。當我的代碼工作,我一般做我所有的緩存清理用手親自讓我知道這是真的做,在這種情況下,我選擇了一個新的擴展添加到我的所謂「清除緩存」 Chrome瀏覽器幫我照顧這更快一點,因爲我正在進行很多小的更改,每次都需要進行乾淨的測試。我沒有意識到的是,當你激活擴展時,它也會清除所有其他標籤的緩存。我也沒有注意到設置的默認設置是在執行清潔後自動重新加載它們。因爲它也不會告訴你,它是視覺上重裝所有這些其他選項卡,我不知道它是重裝標籤,我不得不開到我工作,該網站的主要頁面負責裝載餅乾。

總結一下,當我在我的網站上工作時,在一個選項卡中,對我的管理區域進行測試更改時,我一直看到cookie更新,這些更新只能來自我網站的公共端,並一直讓我覺得還有些問題與我的htaccess變化。我意識到,經過兩天的故障排除之後,我添加的幫助使事情更輕鬆的便捷Dandy擴展實際上是重新加載瀏覽器中的所有選項卡,但不讓我知道,並且所有其他調用都負責持續返回Cookie,只是由我的網站公開的一面產生,這讓我很困惑。在這之後,我將再次手工清理我的緩存。

1

替換此條件:

RewriteCond %{REQUEST_URI} !^/myadmin/ 

有了這些2:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

全部放在一起:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^myadmin/(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /myadmin/index.php?vlng=$1&tpl=$4 [QSA,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(([a-z]{2})(-[a-z]{2})?)(/([a-z0-9-\./]*))?$ /index.php?lng=$1&tpl=$4 [QSA,L,NC] 
+0

這似乎並沒有解決我的問題,即使我刪除第二組條件一起,我硬編碼到URI的/ myadmin/DIR它仍然在服務器的根目錄調用我的index.php文件。您的示例中的RewriteBase/critical是否正常工作?我以前從來沒有要求過它。 – Vince

+0

首先,您必須確保上面的.htaccess直接位於DOCUMENT_ROOT下。請將您的完整.htaccess轉儲到您的問題中,並告訴我該代碼無法工作的URI,以便我也可以從我的結尾進行測試。 – anubhava

+0

完整的.htaccess文件長度將近260行,並且位於DOCUMENT_ROOT中。如果我在嘗試訪問我的管理區域時使用上面提出的代碼,另一個RewriteRule也會被執行,我可以告訴,因爲另一個規則指向更新在我的站點公共端發現的cookie的代碼。我可以阻止我的Cookie更新的唯一方法是刪除您上面張貼的代碼的第二部分,這打破了我的網站的公共端。我需要另一種方式來做到這一點,這將不允許這兩個條件執行。 – Vince