我在下面有以下.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¶m=display:off,settings:none
。
让它变得特别棘手的是,参数并不总是我在上面的示例中使用的那两个选项,它们将动态变化。关于如何实现这一目标的任何想法或建议?
RewriteRule ^/?([a-zA-Z_\-/]+)$ index.php?path=$1 [L]
答案 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']
显式处理该路径。