重写规则问题

时间:2010-10-28 09:21:36

标签: apache .htaccess

RewriteRule oferte-cel-mai-bun-pret(-(apartamente|garsoniere|case|vile|birouri|spatii-comerciale|spatii-industriale|mini-hoteluri-pensiuni|ferme|proprietati-speciale|terenuri-intravilane|terenuri-extravilane))?(-(([0-9+])-([a-z-+]+)+))?-(vanzare|inchiriere)/([a-z-+]+)(/pagina-(([0-9]+)+))?(/)?$ index.php?seo[]=anunturi&tip_categorie=$2&nr=$5&tip_numar=$6&cmbp_$7=1&tip_cautare=$7&judet=$8&pagina=$9 [L,QSA]

我有这个RewriteRule,这个网址:http://site/oferte-cel-mai-bun-pret-vile-1-etaj-vanzare/bucuresti/pagina-2/

所有参数都可以,直到最后一个关于页面,我收到:

Array
(
    [seo] => Array
        (
            [0] => anunturi
        )

    [tip_categorie] => vile
    [nr] => 1
    [tip_numar] => etaj
    [cmbp_vanzare] => 1
    [tip_cautare] => vanzare
    [judet] => bucuresti
    [pagina] => /pagina-2
)

[pagina] => /pagina-2 - 我想在这里只返回页码,如果在网址中是isset ..如果不是将其返回空白..

问题在这里..& pagina = $ 9:|我不能把10美元作为参数?超过9 ......?

2 个答案:

答案 0 :(得分:2)

您不需要对模式中的每个原子进行分组。例如,(-(([0-9+])-([a-z-+]+)+))?可能会缩减为(-([0-9+])-([a-z-+]+))?

RewriteRule\
    ^oferte-cel-mai-bun-pret(-(apartamente|garsoniere|case|vile|birouri|spatii-comerciale|spatii-industriale|mini-hoteluri-pensiuni|ferme|proprietati-speciale|terenuri-intravilane|terenuri-extravilane))?(-([0-9+])-([a-z-+]+))?-(vanzare|inchiriere)/([a-z-+]+)(/pagina-([0-9]+))?/?$\
    index.php?seo[]=anunturi&tip_categorie=$2&nr=$4&tip_numar=$5&cmbp_$6=1&tip_cautare=$6&judet=$7&pagina=$9 [L,QSA]

这样你可以将12组减少到9只。

如果您使用的是Apache 2,则可以使用非捕获组(?:…)而不是普通组(…)。非参考集团的匹配不能被引用。因此,对于您希望能够引用的所有内容,请使用普通组,并将非捕获组用于其他所有内容:

RewriteRule\
    ^oferte-cel-mai-bun-pret(?:-(apartamente|garsoniere|case|vile|birouri|spatii-comerciale|spatii-industriale|mini-hoteluri-pensiuni|ferme|proprietati-speciale|terenuri-intravilane|terenuri-extravilane))?(?:-([0-9+])-([a-z-+]+))?-(vanzare|inchiriere)/([a-z-+]+)(?:/pagina-([0-9]+))?/?$\
    index.php?seo[]=anunturi&tip_categorie=$1&nr=$2&tip_numar=$3&cmbp_$4=1&tip_cautare=$4&judet=$5&pagina=$6 [L,QSA]

答案 1 :(得分:0)

pagina=$10代替pagina=$9