2010-07-20 34 views
0

目前我只是匹配的數字,字母,連字符和我的.htaccess文件強調:匹配「句號」,在國防部重寫

RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?folder=$1 

我也想匹配字符串中的句號。我不想使用:

(.*) 

我曾嘗試:

([.A-Za-z0-9-_]+) 
([\.A-Za-z0-9-_]+) 
([\\.A-Za-z0-9-_]+) 
([A-Za-z0-9-_\.]+) 

無它似乎工作....我怎麼能逃脫句號所以句號匹配!

----------附加信息----------------

作爲一個例子:

mydomain.com/groups/綠色/應該去的index.php?文件夾=綠色

此外,我還重新寫了子域的這頂(我認爲這是導致併發症)...

anotherdomain.com應map to index.php?folder = anotherdomain.com

我已成功重新編寫的子站點以下規則:

# external group domain name 
RewriteCond %{ENV:Rewrite-Done} !^Yes$ 
## exclude requests from myhost.com 
RewriteCond %{HTTP_HOST} !^www\.myhost\.com 
## allowed list of domain masking domains 
RewriteCond %{HTTP_HOST} ^(anotherdomain.com|extra.domain.com|external.otherdomain.com) 
RewriteRule (.*) /groups/%1/$1 

我認爲這是那裏的複雜所在。

----------------解決方案----------------------

儘管沒有找到

RewriteRule (.*) /groups/%1/$1 

到:

RewriteRule (.*) /groups/external/$1&external_domain=%1 

第二重寫從溶液到確切的問題以上,我已經圍繞它通過改變第一再直接(其外部域映射)的工作(在文件夾上)可以解釋「外部域」變量而不是文件夾。

回答

1

您的第一個選擇是最簡單和正確的。方括號內的.沒有特別的含義,因此您可以逐字添加它,而不需要任何特殊的轉義。

實際上在0-9-_中有第二個破折號的小問題。如果你想在方括號內使用短劃線,你應該把它放在字符類的開頭。否則,將有其特殊的意義定義字符範圍:

([-.A-Za-z0-9_]+) 

如果不行還有別的東西不對您的重寫規則。例如,如果這是一個全局規則而不是每個目錄(不是RewriteBase),那麼URL將以斜槓/開頭。

+0

謝謝約翰。我相信我在這裏增加了額外的複雜性。我正在根據目錄名稱重寫,但在某些情況下,我也正在重寫(通過我的文檔根目錄中的另一個.htaccess文件)將子域映射爲文件夾。我將編輯我的帖子以包含這些額外的信息。 – 2010-07-20 12:02:50

+0

我已經添加了額外的信息約翰。爲了記錄,「簡單」(沒有子域映射)版本仍然沒有采取全站。我正在測試一些更簡單的例子來試圖確認我的知識。 – 2010-07-20 12:10:27

+0

此回覆回答了我的原始問題。 – 2010-07-20 12:45:35