我正在写一个脚本的问题。
我有这样的网址:
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
将显示文本“MAIN PAGE”。
forum.php?f=topic&g=[GROUP]&id=[ID]&alias=[ALIAS_TOPIC]
应该显示“GROUP + 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 :(得分:1)
因为您没有使用[L]
(最后)标志而没有使用$
锚定表达式的结尾,所以每个标记在通过前两个规则后都匹配最后一个规则。
例如,此网址将匹配第一个和最后一个规则:example.com/forum/group/123-thing
,因为最后一条规则与forum/
匹配,而跟随它的任何如果没有被{{ 1}}。
添加$
标记以防止掉线,并使用[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/
处理答案 1 :(得分:0)
你必须使用skip标志来阻止其他规则在RewriteRule结束时使用 [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
答案 2 :(得分:0)
感谢@Michael Berkowski提供解决方案
sudo nano /etc/apache2/sites-enabled/000-default
并删除所有出现的MultiView,然后重启apache。