所以我想要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]
答案 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]