通过.htaccess将$ _GET变量传递给虚拟目录

时间:2012-11-03 23:25:38

标签: php .htaccess mod-rewrite

我在下面有以下.htaccess 重写规则,它适用于将虚拟目录转换为参数,例如:

www.example.com/usa/ny/nyc被PHP解释为www.example.com/index.php?path=usa/ny/nyc

我似乎无法弄清楚我将如何更改下面的regex以处理虚拟目录本身的参数。例如,我想:

www.example.com/usa/ny/nyc/?display=off&settings=none被PHP视为www.example.com/index.php?path=usa/ny/nyc&param=display:off,settings:none

让它变得特别棘手的是,参数并不总是我在上面的示例中使用的那两个选项,它们将动态变化。关于如何实现这一目标的任何想法或建议?

RewriteRule ^/?([a-zA-Z_\-/]+)$ index.php?path=$1 [L]  

1 个答案:

答案 0 :(得分:2)

假设您想要未经修改地传递查询字符串,您可以使用[QSA](查询字符串追加)选项,如下所示:

RewriteRule /(.+)$ /index.php?path=$1 [L,QSA]

您可以找到QSA选项here的文档。来自文档:

  

使用[QSA]标志,将映射/ pages / 123?one = 2的请求   到/page.php?page=123&one=two。没有[QSA]标志,同样如此   请求将映射到/page.php?page=123-即现有的   查询字符串将被丢弃。

因此,您的PHP脚本会将所有参数视为标准_$_GET参数,而不需要进行任何其他修改。

如果您希望将结果更像是典型的路径元素,则可以使用以下内容:

RewriteRule /(.+)$ /index.php/$1 [L,QSA]

在上述情况下,您的查询字符串仍将被追加,但您需要使用$_SERVER['PATH_INFO']显式处理该路径。