1

我正在编写的脚本有问题。

我有这些网址:

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
每个以开头的 URL 都/forum向我显示由提供的默认页面/forum.php

例如,forum.php将显示文本“MAIN PAGE”。

forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]应该显示“GROUP + ID + ALIAS_TOPIC”

但如果我访问/forum/android/1-first_topic它会显示“MAIN PAGE”

如果我替换^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

你有什么建议吗?

重写日志: http ://pastebin.com/MeapYeBA

4

3 回答 3

1

因为您没有使用[L](last) 标志,也没有锚定表达式的末尾,$每个表达式都匹配前两个规则后的最后一条规则。

例如,此 URL 将匹配第一条规则和最后一条规则:example.com/forum/group/123-thing因为最后一条规则匹配forum/,如果没有$.

添加[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/进行了测试和处理

于 2013-02-15T20:22:06.647 回答
0

您必须在 RewriteRule 的末尾放置跳过标志以停止其他规则使用 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
于 2013-02-15T20:22:35.420 回答
0

感谢@Michael Berkowski 找到了解决方案

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

并删除所有出现的 MultiViews,然后重新启动 apache。

于 2013-02-15T21:40:13.910 回答