условный htaccess? - PullRequest
       4

условный htaccess?

0 голосов
/ 13 июня 2011

Допустим, у меня есть следующие доступные переменные GET:

состояние

город

спальня

1010 * ванные комнаты *

Тип

цена

Теперь я хочу, чтобы они вышли вот так:

mysite.com / штат / город / # - спальни / # - ванные комнаты / тип / цена

однако, я хочу, чтобы это работало так, чтобы, если одной из этих переменных не было, она все равно работала

то есть:.

mysite.com / штат / город / # - спальни

или

mysite.com / состояние / # - спальни / цена

как мне это сделать?

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Гораздо проще сделать прямо в коде:

#.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ /index.php [QSA,L]

Вы можете использовать любую логику, которую хотите обработать URI запроса:

#index.php
<?php
$request = explode('/', ltrim($_SERVER['REQUEST_URI'], '/'));
$state = array_shift($request);
$city = array_shift($request);
// and so on
1 голос
/ 13 июня 2011

Вы можете сделать части регулярного выражения необязательными, используя квантификатор ?.

            # state   city       bedrooms              bathrooms
RewriteRule ^(\w+)(?:/(\w+))?(?:/(\d+)-bedrooms)?(?:/(\d+)-bathrooms)?$
            script.php?state=$1&city=$2&bedrooms=$3&bathrooms=$4
# add further (?:(\d+)-placeholders)? for the other optional parts

Это, однако, перезапишет пустые переменные, если подшаблон не совпадает.

Так что, возможно, вам лучше определить список RewriteRules с различной специфичностью:

RewriteRule ^(\w+)/(\d+)-bedrooms$ scr?state=$1&bed=$2
RewriteRule ^(\w+)/(\w+)/(\d+)-bedrooms$ scr?state=$1&city=$2&bed=$3
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...