Mod_rewrite有2个类似的重写

时间:2011-12-02 15:25:51

标签: apache mod-rewrite

所以我想要2种不同的重写规则。

首先:

http://mydomain.com/affiliate/533/1 - > http://mydomain.com/affiliate/index.php?member=533&campaign=1

第二

http://mydomain.com/affiliate/533/2/1 - > http://mydomain.com/templates/2/step1.php?member=533

以下.htaccess会出现500内部服务器错误。我做错了什么?

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^affiliate/([0-9]+)/([0-9]+) affiliate/index.php?member=$1&campaign=$2 [NC]
RewriteRule ^affiliate/([0-9]+)/([0-9]+)/step([0-9])+) templates/$2/step$3.php?member=$1 [NC]

3 个答案:

答案 0 :(得分:1)

刚刚使用干净的服务器安装检查了您的示例。

只要我在Options +FollowSymlinks中不使用.htaccess,它就可以正常使用AllowOverride FileInfo

Options +FollowSymlinks中使用.htaccess时,我的AllowOverride Options FileInfo条目中需要<Directory >

所以,它似乎不是一个错误。

答案 1 :(得分:0)

我刚检查了你的配置,我的error.log告诉我“RewriteEngine不允许在这里”。

将“AllowOverride All”添加到该测试目录后,错误就消失了。 但是,https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule上的Apache手册说:

  

要在此上下文中启用重写引擎,您需要进行设置   必须启用“RewriteEngine On”和“Options FollowSymLinks”。如果   您的管理员已禁用了对FollowSymLinks的覆盖   用户的目录,然后你不能使用重写引擎。这个   出于安全原因需要限制。

所以正确的方法是在那里设置并设置FollowSymLinks选项。

亚历。

答案 2 :(得分:0)

你只是忘记了括号,反过来,当Apache尝试最后一个Regexp时,产生一个错误,因此产生一个内部错误,输出500.所以这是应该有效的版本:

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^affiliate/([0-9]+)/([0-9]+) affiliate/index.php?member=$1&campaign=$2 [NC]
RewriteRule ^affiliate/([0-9]+)/([0-9]+)/step(([0-9])+) templates/$2/step$3.php?member=$1 [NC]