目前我有像这个http://www.website.com/index.php?user&page=edit
在index.php中,我设置了$_GET['user']
是否设置了显示用户的页面,在用户页面内部,我已经完成了如果设置了$_GET['page']
,那么找到页面(在本例中为编辑)和加载该页面。
效果很好。
但是我需要在htaccess文件中进行哪些更改,以使网址变为http://www.website.com/user/ - to load user file
和http://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
答案 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段的路径上。