2011-10-12 35 views
3
RewriteRule ^([A-Za-z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC] 

我在這裏使用這個表達式,它工作得很好,但如果我把例如:htaccess的正則表達式下劃線和空間行不通

RewriteRule ^([A-Za-z0-9 _'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ\/\.\-]*)$ public_html/$1 [NC] 

這在這裏不起作用。由於空格和下劃線,我想在正則表達式中包含空格和下劃線,但它根本不起作用。我必須添加一些特別的東西嗎?

,這也不起作用:

RewriteRule ^(.*)$ public_html/$1 [NC] 

我希望能夠鍵入的public_html文件夾中任何事情,開放的。

實施例,I型:www.mysite.com/site_1.php 然後它打開:www.mysite.com/public_html/site_1.php

這htaccess的表達被在HostGator的服務器使用測試Apache 2.2.17 ,我也在我的本地主機Apache 2.2.17中測試過,同樣的情況發生。 。

的錯誤添加_和空間,或當給定*是這樣的:

內部服務器錯誤

服務器遇到一個內部錯誤或配置錯誤, 無法完成您的請求。

請聯繫服務器管理員[email protected],並告知他們發生錯誤的時間,以及您可能已經完成的任何可能導致錯誤的事情 。

有關此錯誤的更多信息可能在服務器錯誤 日誌中可用。

謝謝你們提前。

+2

轉義空格,否則Apache會將其視爲正則表達式模式的結束。所以使它成爲空間而不是空間。至於內部服務器錯誤,請查看服務器的錯誤日誌。它將具體說明造成它的原因(可能是使重寫過程的空格字符有語法錯誤)。 –

+0

感謝您的回答,這有助於解決空間問題,但剩下的問題呢? *和下劃線? – Grego

+0

不要以爲'_'是這些正則表達式中的一個metachar。但試着逃避它,看看會發生什麼。使用'_'或'。*'時仍會出現內部錯誤?再次檢查錯誤日誌,看看它是不同的消息。 –

回答

3

regular-expressions.info來自:

一個字符類中的唯一的特殊字符或元字符是閉合支架(]),反斜槓(\),插入符號(^)和連字符(-)。通常的元字符是字符類中的普通字符,不需要用反斜線進行轉義。

除了上面提到的字符集之外,你不應該逃避字符集中的字符。這裏的簡單訣竅是確保連字符保持在角色類的最後。這將連字符識別爲文字。

RewriteRule ^([a-zA-Z0-9'"%ãõáéíóúâêîôûàÁÃÕÁÉÍÓÚÂÊÎÔÛÀ _/.-]*)$ public_html/$1 [NC] 

爲避免出現「連續循環」,你可以在你的比賽規則之前,包括這個條件:

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 

另外,如果你只是想匹配一切都像您也談到了,我通常做什麼如下所示。請注意,%{QUERY_STRING}可以傳遞任何GET變量。如果您不打算使用常規GET變量,則可以將其刪除。

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.*)$ /index.php?request=$1&%{QUERY_STRING} 

我希望這些信息能幫助你。