Apache的mod_rewrite规则是不是触发?

我在我的服务器( http://flarn2006.dyndns.org/tppupdates/ )上有一个Twitch Plays口袋妖怪Reddit更新的存档。 其中一些包括格式“/ u / 用户名 ”的链接,这是在Reddit上有效,但不是在我的网站上。 (我不是指的是正确的链接,这是正确的)。我试图使用mod_rewrite自动redirect这些链接,所以如果它得到“/ü/ 任何东西 ”的请求包含“ / tppupdates /“,它会将其redirect到Reddit。

我在我的apache2.conf中有以下内容:

RewriteEngine on RewriteCond %{HTTP_REFERER} /tppupdates/ RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301] 

然而,当我点击其中一个违规链接,它只是给了我一个404。怎么了?

好的,这里有一个更完整的答案:

根据重写指令的位置,重写引擎不能以完全相同的方式工作。 指令基本上有两个上下文:每个服务器和每个目录。 他们如下:

 | in apache2.conf files: | | here it is per server | | <VirtualHost> | | per server | | <Directory, Location, File or Proxy> | | per dir !!! | | </Directory, etc> | </VirtualHost> 

在.htaccess中:始终是每个目录上下文

在每个服务器上下文中,使用这个:

 RewriteEngine on RewriteCond %{HTTP_REFERER} /tppupdates/ RewriteRule ^/u/(.*)$ http://reddit.com/u/$1 [R=301] 

并在每个目录的上下文,使用这个,如果你在web根文件夹,根据你的例子:

 RewriteEngine on RewriteCond %{HTTP_REFERER} /tppupdates/ RewriteRule ^u/(.*)$ http://reddit.com/u/$1 [R=301] 

请注意在RewriteRule中没有第一个“ / ”。

通过这些规则,您不需要创build一个名为/ u的目录。

一些更多的信息在Apache文档: 重写规则,什么是匹配和技术细节

你确定你想要这个RewriteCond