在网址中隐藏get变量

时间:2013-09-21 20:44:09

标签: php .htaccess url-rewriting get

我有一个像

的网址
localhost/index?id=2

如何使用htaccess隐藏id部分,只显示:

localhost/index/2

2 个答案:

答案 0 :(得分:4)

为了捕获查询字符串,您需要使用%{QUERY_STRING}%{THE_REQUEST}

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Redirect /index?id=2 to /index/2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\?id=([^&\s]+) [NC]
RewriteRule ^ /index?%1 [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [QSA,L]

鉴于您没有其他可能与您的需求相冲突的规则,这应该可以正常工作。

确认其工作后,您可以从302更改为301,但为了避免缓存,应始终使用302进行测试。

使用%{THE_REQUEST}的另一种方式是:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Redirect /index?id=2 to /index/2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\?id=([^&\s]+) [NC]
RewriteRule ^ /index/%1? [R=302,L]

# Internally forward /index/2 to /index.php?id=2
RewriteRule ^index/([0-9]+)/?$ /index.php?id=$1 [QSA,NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [QSA,L]

答案 1 :(得分:0)

 RewriteEngine On
 RewriteRule    ^([A-Za-z0-9-+_%*?]+)/?$    index.php?id=$1     [L]

([A-Za-z0-9 - + _%*?] +)< - 括号中的这一部分用作正则表达式意味着你正在寻找从A到z和从a到的任何字符到z和0到9之间的任何数字和符号 - ,+,_,%,*,?关闭方括号后面的+号表示不止一个。

简而言之,你要问的是([在这里] +)并且它不止一个,如果你删除了括号之后的+符号它只会返回第一个字符