1

Apache 1.3(.37) 和 2.2(.11) 之间的 mod_rewrite 有什么区别?

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 1.3.37。我对 mod rewrite 真的很陌生,今天早上才开始学习正则表达式。我从这里去哪里?

更新:我在本地机器上安装了 Apache 1.3.37。我收到错误“无效命令'RewriteEngine',可能拼写错误或由未包含在服务器配置中的模块定义”。

更新 2:我修复了本地机器的问题。现在我遇到了与生产服务器相同的问题。

4

3 回答 3

3

Apache 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
于 2009-08-03T19:39:29.560 回答
1

尝试替换这个:

[\w'-]

有了这个:

[-\w']

在一些 RegEx 解析器中,如果你想-在字符集中,它必须是第一个字符,因为它在字符集中具有特殊含义。

于 2009-08-03T19:32:03.053 回答
0

我想到了。只有最后一条规则是问题所在。注意 [^\w] 而不是 [\w'-]。

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

这适用于 Apache 1.3.37,但不再适用于 Apache 2.2.11。如果有人知道一种让它在两者中起作用的方法,我真的很想理解这一点,而不仅仅是让它起作用。

于 2009-08-03T19:27:43.530 回答