在htaccess编辑后解析URL变量

时间:2015-10-05 17:58:45

标签: php .htaccess mod-rewrite

所以这个让我难过......

我设置了htaccess,因此当用户键入名称(假设它正确)时,它会将浏览器重定向到正确的文件(即http://localhost/mgo/barbis)。当我在URL中使用变量(即http://localhost/mgo/barbis?page=menu&temp=1时,由于我如何解析数据,它仍然可以正常工作。但是当我想从字符串中提取$_GET变量时,它不起作用。

我尝试了var_dump($_GET),它向我显示唯一的现有变量是[id]=>barbis

我知道一个可行的解决方案是在"?"之后捕获数据。 (SERVER_URI, substr, strpos, etc)并爆炸成阵列,但我很好奇这是否只是我想念的简单事物。

我不知道这是否重要,但从好的角度来看,这是我的htaccess布局。

RewriteEngine On
RewriteBase /mgo/modules/menu/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ index.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?id=$1

<filesMatch "\.(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>

ErrorDocument 404 /mgo/404.php

非常感谢任何反馈。谢谢!

1 个答案:

答案 0 :(得分:1)

使用:

RewriteEngine On
RewriteBase /mgo/modules/menu/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/?$ index.php?id=$1 [QSA,L]

使用[QSA]:当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有查询字符串,并将其替换为新生成的查询字符串。使用[QSA]标志会导致查询字符串合并。

/?使用或不使用最终/