我使用这个htaccess rewriterule:
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/?$ /index.php?lang=$1 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/?$ /index.php?lang=$1&controller=$2 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6 [L]
RewriteRule ^([a-z]{2}|[a-z]{2}\-[A-Z]{2})/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6&p5=$7 [L]
正如您所看到的,其逻辑是第一个参数是语言格式化(即:en
或en-US
),第二个参数是控制器其余的参数命名为'p'
concat n
,其中n
是参数(p1 / p2 / p3)的订单号。
现在,我想添加这样的内容:
RewriteRule ^([a-zA-Z0-9]{3,})/?$ /index.php?defaultcontroller=true&p1=$1 [L]
RewriteRule ^([a-zA-Z0-9]{3,})/([^/]*)/?$ /index.php?defaultcontroller=true&p1=$1&p2=$2 [L]
// And so on ...
如果第一个参数不是语言格式,控制器是默认控制器,第一个参数是p1
,第二个参数是p2
,这是上。但这有三个问题:
([a-zA-Z0-9]{3,})
不是对([a-z]{2}|[a-z]{2}\-[A-Z]{2})
的否定。 http://example.com/e
或http://example.com/3n
等网址与任何模式都不匹配(它们应匹配第二种模式)。http://example.com/es-US/controller/p1/p2/p3/p4/p5/p6
与任何模式都不匹配。那么,请你帮我把它减少到只有两行的(种类)递归代码(一个用于第一个参数,一个用于语言格式化,一个用于第一个参数非laguage formated)?
答案 0 :(得分:1)
您可以使用以下1个班轮:
RewriteRule ^(en|en-US)/?([^/]*)/?([^/]*)/?([^/]*)/?([^]*)/([^/]*)/?([^/]*)/?$ /index.php?lang=$1&controller=$2&p1=$3&p2=$4&p3=$5&p4=$6&p5=$7 [L]