请帮助解决此问题
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的问题?
答案 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。或许你忘了把/(斜线)放在前面? (问号)。没有把正则表达式改变的那种改变。