需要帮助.htaccess,似乎不起作用

时间:2010-12-06 10:12:07

标签: php .htaccess mod-rewrite

目前我有像这个http://www.website.com/index.php?user&page=edit

这样的网址参数

在index.php中,我设置了$_GET['user']是否设置了显示用户的页面,在用户页面内部,我已经完成了如果设置了$_GET['page'],那么找到页面(在本例中为编辑)和加载该页面。

效果很好。

但是我需要在htaccess文件中进行哪些更改,以使网址变为http://www.website.com/user/ - to load user filehttp://www.website.com/user/edit - to load user edit file

这是我的htaccess文件内容

Options +FollowSymLinks

RewriteEngine On

RewriteRule ^(.*)/$ index.php?$1

RewriteRule ^(.*)/(.*)/$ index.php?$1&page=$2

但这似乎不像我预期的那样有效。

如果我加载http://www.website.com/user/edit - it works但是如果我只是加载/user/ - it doesn't

4 个答案:

答案 0 :(得分:1)

尝试切换两个规则并添加L - 标志:

RewriteRule ^(.*)/(.*)/$ index.php?$1&page=$2 [L]
RewriteRule ^(.*)/$ index.php?$1 [L]

.*匹配每个字符序列。这意味着user/edit/user/匹配。您需要先放置更具体的规则,以确保其间存在/。我建议您将规则更改为类似的规则,因为其他规则可能与您不想要的内容匹配:

RewriteRule ^([^/]+)/([^/]+)/$ index.php?$1&page=$2 [L]
RewriteRule ^([^/]+)/$ index.php?$1 [L]

[^/]+将匹配不包含任何/的每个序列。

答案 1 :(得分:1)

我认为问题已经得到解答 - 但你的规则可以改进。

RewriteRule ^([a-zA-Z]*)/$ index.php?$1
// ...

所以它与/(斜杠)不匹配,你不会遇到麻烦; - )

答案 2 :(得分:0)

选项+ FollowSymLinks

RewriteEngine On

RewriteRule ^(。*)([^ \ /。] +)/?$ index.php?$ 1

RewriteRule ^(。)/(。)/ $ index.php?$ 1& page = $ 2

答案 3 :(得分:0)

由于.*匹配任何内容,您的第一条规则将始终适用。

您应该使用更具体的模式,例如[^/]+/除外)而不是.*

RewriteRule ^([^/]+)/$ index.php?$1
RewriteRule ^([^/]+)/([^/]+)/$ index.php?$1&page=$2

现在第一条规则只应用于只有一个段的路径,第二条规则应用于带有twi段的路径上。