将漂亮的URL转换为GET参数

时间:2014-12-07 10:11:12

标签: .htaccess mod-rewrite

花了几个小时搜索没有成功,我想寻求帮助。

我需要(默默地)重写此网址:http://example.com/aaa/bbb/ccc
进入:http://example.com/?p1=aaa&p2=bbb&p3=ccc

基本上我需要将漂亮的URL转换成GET参数 我的要求是:

  • 用户不得知道此重写(浏览器地址栏未更改)
  • 为任意数量的级别/参数工作

请帮忙。

我现在拥有的是:
RewriteEngine on
RewriteRule /([^/]+)/([^/]+)?/?([^/]+)?/?([^/]+)?/? ?p1=$1&p2=$2&p3=$3&p4=$4 [NC,L]

我想写#34;这适用于最多4个参数"但....它突然停止工作,我得到500内部服务器错误? Aaaarg!我不知道自己做错了什么......

2 个答案:

答案 0 :(得分:2)

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On
RewriteBase /

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# handle 4 parameters
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ ?p1=$1&p2=$2&p3=$3&p4=$4 [QSA,L]

# handle 3 parameters
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ ?p1=$1&p2=$2&p3=$3 [QSA,L]

答案 1 :(得分:2)

更容易做到这一点:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?params=$1 [L,QSA] 

然后在你的代码中你需要爆炸$ _GET [' params']来获取url部分。这可以用于您可能拥有的任何数量的参数,并且用户不会看到差异,因为url总是看起来像example.com/aaa/bbb/ccc