为什么example.com/foo/有效,但example.com/foo没有?
问题描述:
我有一个很小的问题。我创建了一个.htaccess文件,假设将example.com/user/foo/bar
的条件重写为example.com/user.php?username=$1&tab=$2
,因此用户名称将是foo,并且查看选项卡必须是条形。为什么example.com/foo/有效,但example.com/foo没有?
但是,如果没有提供完全像example.com/user/foo/
那样的条形图数据,它会转到具有默认选项卡(默认选项卡在script.php文件中生成)的用户。
但我看到一些网站,他们可以做到这一点,就像example.com/user/foo,没有/在线。当我做example.com/foo
去用户,它说没有找到页面。我的相应.htaccess行是:
RewriteEngine On
RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L]
请帮我解决这个问题。
答
你的匹配规则是^user/(.*)/(.*)$
,这意味着第二个斜杠必须在那里(因为它是指定的),但文字之后是可选的(因为*
匹配零个或多个字符)。
真的,我会添加两个重写规则来做不同的事情(并防止使用复杂的正则表达式)
RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L]
RewriteRule ^user/(.*) user.php?username=$1 [L]
答
或者,你可以让第二个参数可选:
RewriteRule ^user/([^/]+)/?(?:(.*)|)$ user.php?username=$1&tab=$2 [L]
只要你不介意为$_GET['tab']
基本上你的规则要求URL没有价值有两个非''''''''''''''''''''''''''''''''''/'' – 2015-01-26 21:31:38