URL重写:htaccess的多个规则
问题描述:
请帮忙解决这个问题URL重写:htaccess的多个规则
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]
与出亲bleo在seo?
答
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]
(我所做的仅仅是测试,它似乎没有问题的工作。)
另外,如果你想这REDIR ect,而不是只是将请求代理到其他php文件,您需要在RewriteRule
的末尾添加类似[R=301]
的内容。
答
我看到的一个问题是,你写了^ 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。或者也许你忘记了/(斜线)之前? (问号)。不要把这些变化,正则表达式的意思。
你的答案很好,但是我可以不用** RewriteCond ** – 2011-12-31 15:48:22
不,你需要'RewriteCond'。根据http://wiki.apache.org/httpd/RewriteQueryString,“RewriteRule不能直接访问查询字符串...” – ziesemer 2011-12-31 15:51:44