2009-08-03 24 views
1

Apache 1.3(.37)和2.2(.11)之間的mod_rewrite有什麼區別?在Apache 1.3和2.2的mod重寫中的差異

RewriteEngine On 

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

RewriteRule ^pages/edit(account|page)/([0-9]+)*$ ./index.php?p=edit$1&id=$2 
RewriteRule ^pages/([\w'-]+)*$ ./index.php?p=$1 

我寫這和它的「作品在我的機器」,這是運行Apache 2.2.11,但它需要運行在生產服務器是Apache的37年3月1日。我真的很陌生,今天早上剛開始學習正則表達式。我從哪裏出發?

更新:我在本地機器上安裝了Apache 1.3.37。我收到錯誤「無效命令'RewriteEngine',可能是錯誤拼寫或由未包含在服務器配置中的模塊定義的」。

更新2:我解決了我用本地機器遇到的問題。現在我遇到了與生產服務器上相同的問題。

+0

嗨,你在運行Apache 1的主機上遇到了什麼問題?任何類型的錯誤?或者只是「沒有發生」? – 2009-08-03 18:36:25

回答

3

阿帕奇1. X使用POSIX擴展正則表達式和那些不理解像\w速記字符類。所以試試這個:

RewriteRule ^pages/edit(account|page)/([0-9]+)$ ./index.php?p=edit$1&id=$2 
RewriteRule ^pages/([A-Za-z0-9_'-]+)$ ./index.php?p=$1 
+0

這適用於兩個版本。非常好! – Samuel 2009-08-03 20:05:05

0

我想通了。只有最後一個規則是這個問題。注意[^ \ w]而不是[\ w'-]。

RewriteRule ^pages/([^\w]+)*$ ./index.php?p=$1 

這適用於Apache 1.3.37,但不再適用於Apache 2.2.11。如果有人知道一種方法來讓這兩個工作,我真的想了解這一點,而不是讓它工作。

1

嘗試更換這樣的:這個

[\w'-] 

[-\w'] 

在一些正則表達式解析器,如果你在一個字符集要-,它需要的第一個字符,因爲它有字符集中的特殊含義。