.htaccess URL中的多个参数

时间:2017-12-09 15:15:28

标签: .htaccess mod-rewrite

我现在正在使用此.htaccess文件。它只会将网址从www.example.com/?page=home更改为www.example.com/home

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

RewriteRule ^([\w-]+)?$ index.php?page=$1 [L]
RewriteRule ^([\w-]+)/?$ index.php?page=$1 [L]

我想添加更多$_GET参数,例如www.example.com/home/parameter1/value1/。 并且最好能无限期地完成这些参数。

1 个答案:

答案 0 :(得分:1)

单独使用.htaccess无法“无限期”执行此操作。您需要决定参数的最大数量(N)并按顺序为每个参数编写一个指令:N,N-1,N-2,... 1.但是,您也是受支持的反向引用数量限制。即。只需$1$9,您就可以使用在网址路径中包含参数名称的方法限制为4个参数。

例如:

# 3 additional parameters
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?page=$1&$2=$3&$4=$5&$6=$7 [L]

# 2 additional parameters
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?page=$1&$2=$3&$4=$5 [L]

# 1 additional parameter
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?page=$1&$2=$3 [L]

# No parameters (just the page)
RewriteRule ^([\w-]+)/?$ index.php?page=$1 [L]

这些都允许使用可选的尾部斜杠(如当前示例中所示)。但是,最好决定是否需要尾部斜杠并选择其中一个斜杠。使用尾部斜杠可选只会促进重复内容

在我看来,这个网址模式也有点过于“一般化”。通常更具体,避免在URL中包含参数 name 。例如:example.com/home/value1/value2/value2 - 参数名称(param1param2等)将在RewriteRule 替换中进行硬编码。这也可以让你有两倍的参数

RewriteRule ^([\w-]+)?$ index.php?page=$1 [L]
RewriteRule ^([\w-]+)/?$ index.php?page=$1 [L]

这里你不需要两个指令。 (正确设置DirectoryIndex。)