url rewrite:htaccess中的多个规则

时间:2011-12-31 14:59:35

标签: .htaccess mod-rewrite

请帮助解决此问题

RewriteEngine On
ErrorDocument 400 /tmp/error/404.html
ErrorDocument 401 /404.html
ErrorDocument 403 /404.html
ErrorDocument 404 /404.html
ErrorDocument 500 /404.html
RewriteBase /
DirectoryIndex index.php
RewriteRule ^([0-9a-z\-\_]+)?$ /index.php?url=$1 [L,QSA,NC]
#RewriteRule ^showthread.php?t=([0-9]+)/?$ /vb/showthread.php?t=$1 [NC]

所有规则都有效,但评论规则我不能写出来

你能帮我写一下这条规则

吗?

我想将此路径/showthread.php?t=[0-9]重定向到/vb/showthread.php?t=[0-9]

没有seo的问题?

2 个答案:

答案 0 :(得分:3)

RewriteCond %{QUERY_STRING} ^t=(\d+)$
RewriteRule ^showthread\.php /vb/showthread.php?t=%1 [NC]

参考:http://wiki.apache.org/httpd/RewriteQueryString

请注意,根据此处显示的示例,这仅在t是查询字符串中唯一参数的情况下才有效 - 但它也可以扩展为允许其他参数,例如:

RewriteCond %{QUERY_STRING} (?:^|&)t=(\d+)(?:&|$)
RewriteRule ^showthread\.php /vb/showthread.php?t=%1 [NC]

(我刚试过这个,看起来没有问题。)

此外,如果您希望将其重定向,而不是仅将请求代理到其他php文件,则需要在[R=301]的末尾添加RewriteRule之类的内容。

答案 1 :(得分:1)

我看到的一个问题是,你写了^ showthread.php?t =([0-9] +)/?$作为正则表达式。在正则表达式(点)意味着任何事情都可以。尝试更改注释行,

RewriteRule ^showthread\.php?t=([0-9]+)/?$ /vb/showthread.php?t=$1 [NC]

另一件事是,

RewriteRule ^([0-9a-z\-\_]+)?$ /index.php?url=$1 [L,QSA,NC]

此行直接获取所有请求并重定向到index.php。因为你在正则表达式中说即使它是空的,再次将请求发送到index.php。或许你忘了把/(斜线)放在前面? (问号)。没有把正则表达式改变的那种改变。