2009-08-03 47 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'] 

在一些正则表达式解析器,如果你在一个字符集要-,它需要的第一个字符,因为它有字符集中的特殊含义。