2011-11-18 92 views
0

我想作一個URL重寫配置d以下的行吟詩人?Web服務器的URL重寫

  1. 允許自己的網站網址出現像site.com/category/item(重定向到index.php C = $ 1 & I = $ 2)
  2. 允許從像配置(site.com/config/conf.txt)
  3. 重定向URL等site.com/admin/category/item到admin.php的目錄包括文件? c = $ 1 & i = $ 2

到目前爲止,我設法建立這條規則:

RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 
RewriteRule ^[^/]+/([^/]+)$ $1 

這些工作爲先2項,但我不能設法找到第三個,將與現有的規則工作...

目前我使用Apache,但我也期待使用NGinx。如果規則是兼容的,那將會很棒。

你有什麼建議嗎?

+0

除非你的名字是'user',你的姓氏'573152'(在這種情況下我會道歉的),你還是一個未知數。 –

+0

爲什麼要匿名總是一個壞主意?出於某種原因,我不願意這些「社交」網絡。這個網站給了我一個編號的用戶名,我對此感到滿意。我們能回到這個話題嗎? –

回答

0

這裏的答案:

RewriteCond %{REQUEST_URI} !config 
RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} !config 
RewriteRule ^admin/([a-z]+)/([^\.^/]+)$ admin.php?c=$1&i=$2 [L] 

翻譯:如果URI不/config/開始,然後(只有)嘗試應用其他重寫規則,所以「允許從像配置目錄(包含文件site.com/config/conf.txt)「仍然將規則應用於其他URL。


請儘量使用RewriteLog指令:它可以幫助您追蹤到這樣的問題:

# Trace: 
# (!) file gets big quickly, remove in prod environments: 
RewriteLog "/web/logs/mywebsite.rewrite.log" 
RewriteLogLevel 9 
RewriteEngine On 

告訴我,如果它的工作原理。

+0

首先,感謝您的幫助。我嘗試過,但配置沒有奏效。當試圖從PHP文件中包含配置文件時,當我嘗試訪問'site.com/category/item'時,出現以下錯誤:'找不到所請求的URL /category/config/config.txt這個服務器。' –

+0

我編輯了我的rewriterules告訴我它是否可以工作 –

0

非常感謝這個提示:日誌解釋了所有關於重寫的過程!很高興看到條件在規則匹配後被檢查......即使多線程訪問日誌文件使其像意大利麪碗一樣流露出來。

下面是我使用的規則:

RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule ^([a-z]+)/([^\.^/]+)$ index.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} !/config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule ^admin/([a-z]+)/([^\.^/]+)$ admin.php?c=$1&i=$2 [L] 

RewriteCond %{REQUEST_URI} /config/([^\.]+/)*[a-z\.^/]+$ 
RewriteRule /config/(([^\.]+/)*[a-z\.^/]+)$ config/$1 [L] 

我開始通過從一開始就從端檢查該URL,而不是,因爲這些規則可以然後在根目錄的子目錄被應用。 我允許調用config目錄下的子目錄。 最後一條規則是可重入的,但如果將規則應用於根目錄中,請避免其他重新編程。如果不是,則表達式不匹配,並且應用該規則以產生與輸入相同的輸出。

通常,避免服務器再次將重定向規則應用於先前重定向的URI是毫無意義的。文檔告訴我有一個[END]標誌這樣做,但我沒能成功實踐... 因此,對我而言,所有的htaccess規則都應該是可重入的。