如何在rewrite-hatchs-regexp中保留空字符串作为参数


How to keep empty strings as parameters in rewrite hatches regexp

在图案填充重写条件下,我在将空参数作为url传递时遇到问题。

我的rewrite simple通过/获取所有参数splitter,并将它们作为php GET:传递

RewriteRule /?([A-Z.a-z0-9_-]*)/?([A-Z.a-z0-9_-]*)/?([A-Z.a-z0-9_-]*)/?([A-Z.a-z0-9_-]*)/?([A-Z.a-z0-9_-]*)/?([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2&option3=$3&option4=$4&option5=$5&option6=$6

但是当我尝试这个网址时:

---.com/fiction//204

我在php中得到了这些get参数(注意url中的双/):

Array ( 
[option1] => fiction 
[option2] => 204 
[option3] => 
[option4] => 
[option5] => 
[option6] => )

但我想要

Array ( 
[option1] => fiction 
[option2] =>  
[option3] => 204
[option4] => 
[option5] => 
[option6] => )

我尝试向rexexp:(^$|[A-Z.a-z0-9_-]*)添加一个空字符串,但这不起作用。。

知道吗?

这些空值必须从RewriteCond中捕获,因为RewriteRule将所有多个/剥离为单个/

这应该对你有用:

RewriteCond %{REQUEST_URI} ^/(['w-]*)(?:/(['w-]*)(?:/(['w-]*)(?:/(['w-]*)(?:/(['w-]*)(?:/(['w-]*))?)?)?)?)?/?$
RewriteRule ^ index.php?option1=%1&option2=%2&option3=%3&option4=%4&option5=%5&option6=%6 [L,QSA]

此规则使第一个参数之后的每个参数都是可选的。

您可能需要这6条规则,而不是现有的

RewriteRule /([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2&option3=$3&option4=$4&option5=$5&option6=$6
RewriteRule /([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2&option3=$3&option4=$4&option5=$5
RewriteRule /([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2&option3=$3&option4=$4
RewriteRule /([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2&option3=$3
RewriteRule /([A-Z.a-z0-9_-]*)/([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1&option2=$2
RewriteRule /([A-Z.a-z0-9_-]*)/?$ index.php?option1=$1
RewriteRule /$ index.php

但我不确定具有多个连续斜杠的URL是否适用于所有浏览器&服务器,我认为这通常是个坏主意。