PHP $ _GET和.htaccess重写

时间:2010-11-26 16:00:10

标签: php .htaccess url-rewriting

我知道这可能是一个常见的问题而且之前已经被问过但是.htacess看起来很陌生,我似乎无法通过查看以前的问题来解决这个问题。

我有一个搜索的索引脚本,语法为:

.../listing/?field=property_type&query=retail

我只想将其重写为:

.../listing/{field}/{query}

另外一个问题,我有一些布尔值的字段..例如:

.../listings/?forlease=1

所以在这种情况下我只使用isset()但是想将其重写为:

.../listings/forlease/

一如既往地感谢您的帮助! Stack Overflow rock!

修改

我看到了一些很好的答案,但完全是我正在寻找的东西:

用户请求: .../listing/property_type/retail/

Apache重写为: ../listing/?field=property_type&query=retail

脚本看到: $_GET['field']='property_type'& $GET['query']='retail'

在布尔值的情况下(所有布尔值只有一个Dir):

用户请求: .../listing/forlease/

Apache重写为: ../listing/?forlease=1

脚本看到: $_GET['forlease'] = 1

3 个答案:

答案 0 :(得分:2)

如果您的网络服务器是Apache,那么您可以使用mod_rewrite。

退房:http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html =)

答案 1 :(得分:1)

RewriteRule ^.*/listing/([^/]*)/?$ listing/?$1=1 [NC,L]
RewriteRule ^.*/listing/([^/]*)/?(.*)$ listing/?property_type=$1&query=$2 [NC,L]

试试这个,首先检查一个条件(http://...listing/forlease),否则重写为(http://...listing/field/query)

你可能想要:

RewriteRule ^.*/listing/([^/]*)/?$ listing/?$1=1&%{QUERY_STRING} [NC,L]
RewriteRule ^.*/listing/([^/]*)/?(.*)$ listing/?property_type=$1&query=$2&%{QUERY_STRING} [NC,L]

在查询字符串中保留任何其他参数。

答案 2 :(得分:1)

在你的.htaccess中你可以有一些简单的规则:

RewriteRule ^.*/listings/([a-zA-Z0-9_]+)/([a-zA-z0-9_]+)$ /listing/?property_type=$1&query=$2 [QSA,L]
RewriteRule ^.*/listings/forlease/$ /listing/?forlease=1 [QSA,L]