使用$ _get确定网页时更改URL

时间:2016-07-13 06:46:20

标签: php .htaccess mod-rewrite

我目前使用$_GET['base']来确定用户访问的主页。

这会产生localhost/?base=administratorlocalhost/?base=guest

我也用它来控制用户所在的页面,例如 localhost/?base=guest&page=register

有没有办法使用mod_rewrite或htaccess来改变这个系统的工作方式? 修改我的代码不是问题,这可能吗?

编辑:

我想要实现这个目标:

localhost/?base=guestlocalhost/guest
localhost/?base=adminlocalhost/admin
localhost/?base=guest&page=registerlocalhost/guest/register

以下是我的htaccess文件

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /?base=$1&page=$2 [L]
RewriteRule ^([^/]*)$ /?base=$1 [L]

文档路径会影响它的调用方式吗?因为我使用case循环来包含所需的项目。

然而,这适用于localhost,但它会将每个其他地址循环到main。

RewriteEngine On
RewriteRule ^$ /index.php?base=guest[L]

但没有按预期给出结果。

3 个答案:

答案 0 :(得分:1)

.htaccess中的规则需要按相反的顺序排列,如下所示:

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

这是因为如果它按照你拥有它的顺序保存,localhost/?base=guest&page=register& localhost/?base=administrator将匹配规则RewriteRule ^([^/]*)$ /?base=$1

以相反的顺序排列它们可确保第一条规则仅与localhost/?base=guest&page=register匹配。它与localhost/?base=administrator的第一条规则不匹配。我希望有所帮助。

答案 1 :(得分:1)

所以你可以使用这个简单的代码:

RewriteEngine on

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

\w会匹配符号a-z0-9和下划线_,我认为这些字符足以满足您的需求,但如果您需要扩展,则很容易< / p>

此外,在这种情况下,您无需更改代码,因为base数组中的page$_GET参数仍然存在

<强>更新

禁用查询字符串参数pagebase(可能需要其他参数)将这两行添加到底部的代码中:

RewriteCond %{THE_REQUEST} (\?|&)(page|base) [NC]
RewriteRule .* - [L,R=404]

答案 2 :(得分:1)

您需要从规则

中排除现有的文件和文件夹
RewriteEngine On
# if the request is a dir
RewriteCond %{REQUEST_FILENAME} -d [OR]
# or file
RewriteCond %{REQUEST_FILENAME} -f
#do nothing
RewriteRule ^ - [L]
RewriteRule ^([^/]*)/([^/]*)$ /?base=$1&page=$2 [L]
RewriteRule ^([^/]*)$ /?base=$1 [L]