为什么example.com/foo/有效但是example.com/foo没有?

时间:2015-01-26 21:22:16

标签: php .htaccess

我有一个非常小的问题。我创建了一个.htaccess文件,假设将条件example.com/user/foo/bar重写为example.com/user.php?username=$1&tab=$2,因此用户名将为foo,查看选项卡必须为bar。

但是当没有提供与example.com/user/foo/完全相同的条形数据时,它会转到带有默认选项卡的用户(默认选项卡在script.php文件中生成)。

但我看到一些网站,他们可以像example.com/user/foo那样做,没有/ at行。当我example.com/foo转到用户时,它会显示未找到的页面。我的correspoding .htaccess行是:

RewriteEngine On
RewriteRule ^user/(.*)/(.*)$ user.php?username=$1&tab=$2 [L]

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:5)

您的匹配规则是^user/(.*)/(.*)$,这意味着第二个斜杠必须在那里(因为它已指定),但之后的文本是可选的(因为{{1}匹配零个或多个字符)。

实际上,我添加了两个重写规则,以区别对待(并防止使用复杂的正则表达式),例如。

*

答案 1 :(得分:2)

或者,您可以将第二个参数设为可选:

RewriteRule ^user/([^/]+)/?(?:(.*)|)$ user.php?username=$1&tab=$2 [L]

只要您不介意$_GET['tab']

没有价值