4

我有以下.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]  
4

1 回答 1

2

假设您想传递未修改的查询字符串,您可以使用[QSA](query string append) 选项,如下所示:

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

您可以在此处找到该QSA选项的文档。从文档:

使用 [QSA] 标志,对 /pages/123?one=two 的请求将被映射到 /page.php?page=123&one=two。如果没有 [QSA] 标志,相同的请求将被映射到 /page.php?page=123 - 也就是说,现有的查询字符串将被丢弃。

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

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

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

在上述情况下,您的查询字符串仍将被附加,但是您需要使用$_SERVER['PATH_INFO'].

于 2012-11-03T23:30:46.413 回答