2013-02-15 60 views
1

我在写一个脚本时遇到了一些问题。Apache重写规则不适用于特定的前缀

我有那些类型的网址:

forum.php?f=topic&g=$1&id=$2&alias=$3 
forum.php?f=group&g=$1 
forum.php 

我需要重写那些有:

/forum/group/id-alias_topic > forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC] 
/forum/group > forum.php?f=group&g=[GROUP] 
/forum > forum.php 

我尝试:

RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+) forum.php?f=topic&g=$1&id=$2&alias=$3 
RewriteRule ^forum/([\w'-]+) forum.php?f=group&g=$1 
RewriteRule ^forum/ forum.php 

但它不工作。这表明我只forum.php
开始/forum每个网址都显示我的/forum.php

例如,forum.php提供将显示文本“主页面”的默认页。

forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]应该告诉我 “群组+ ID + ALIAS_TOPIC”

但是如果我访问/forum/android/1-first_topic它为我 “主页面”

如果我更换^forum,例如^foru,它的工作原理。 我已经清理了我的浏览器缓存并重新启动了apache,但它仍然不起作用。 也与其他浏览器的问题是一样的。 在我的/ var/WWW也有一些文件和目录:

administrator.php assets cache forum_functions.php forum.php functions.php global.php index.php media notfound.php OLD pwdgen.php robots.txt rss.php simple_html_dom.php store.php template v.php 

你有一些建议吗?

Rewrite.log:http://pastebin.com/MeapYeBA

回答

0

重写规则的端找到一个由于解决@迈克尔Berkowski

sudo nano /etc/apache2/sites-enabled/000-default 

,并删除多视图的所有事件,然后重新启动APA澈。

1

因为你还没有使用[L](最后)标志和不固定的表情结束与$每一个通过头两年下降之后的最后一个规则相匹配。因为最后一条规则forum/任何它后面如果不通过$终止匹配example.com/forum/group/123-thing

例如,此URL将匹配第一个和最后一个规则。

添加[L]标志,以防止落空,并终止使用正则表达式$

# Don't apply these if the file actually exists (like forum.php) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# This one doesn't really need to terminate in $ 
RewriteRule ^forum/([^/]+)/([0-9]+)-(.+) forum.php?f=topic&g=$1&id=$2&alias=$3 [L] 
# This one must terminate with $ 
RewriteRule ^forum/([^/]+)$ forum.php?f=group&g=$1 [L] 
# As must this one.. 
RewriteRule ^forum/?$ forum.php [L] 

我也换成你[\w'-]+用一个简单的[^/]+匹配一切都交给下一/。在最后一条规则中,我添加了/?以允许选择尾随/。它将与[\w'-]+一样工作,但由于您打算匹配/之间的所有内容,[^/]+是更常见的模式。

每个上述规则进行测试,并在http://htaccess.madewithlove.be/

+0

你的代码不工作...我认为我的服务器存在一些问题,如果我删除.htaccess,如果我访问/论坛/它的工作,但如果我/forum.php isn没有.htaccess如何进入/论坛/但进入/? – 2013-02-15 20:30:39

+0

我的error.log只声明有关未在PHP脚本中定义的PHP变量的通知。没有关于.htaccess的任何信息。 我试过你的最后一个代码,但没有成功。我在文档根目录中添加了关于文件和文件夹的信息。 – 2013-02-15 20:37:23

+0

最后,这个.htaccess文件属于'/',不在任何子目录中。 – 2013-02-15 20:40:18

0

工作在必须将跳过标志为停止其他规则随着tihs [S]在像

RewriteRule ^forum/([\w'-]+)/([0-9]+)-([\w'-]+)$ forum.php?f=topic&g=$1&id=$2&alias=$3 [S=2] 
RewriteRule ^forum/([\w'-]+)$ forum.php?f=group&g=$1 [S=1] 
RewriteRule ^forum/$ forum.php 
+0

Thx,你的代码不起作用,它返回我的代码相同的行为。 – 2013-02-15 20:40:37