为什么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] 

请帮我解决这个问题。

+0

基本上你的规则要求URL没有价值有两个非''''''''''''''''''''''''''''''''''/'' – 2015-01-26 21:31:38

你的匹配规则是^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']