Плюсы / минусы использования index.php? Q = путь / вместо index.php / путь / при маршрутизации URL? - PullRequest
0 голосов
/ 04 октября 2011

Я пишу простой метод для сопоставления маршрутов с файлами, и я натолкнулся на два способа сделать это.

Первый, и я полагаю, используется большинством фреймворков, использует $ _SERVER ['REQUEST_URI'] переменная для извлечения всего после index.php:

RewriteRule ^(.*)$ index.php [QSA,L]

Второй способ используется в Drupal, и маршрут просто передается в виде строки запроса.

RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]

Теперь, «путь Drupal» кажется мне намного проще.При использовании другого метода вам нужно будет использовать «explode» как для $ _SERVER ['REQUEST_URI'], так и для $ _SERVER ['SCRIPT_NAME'], а затем использовать что-то вроде array_diff_assoc для удаления имени скрипта и имени подкаталога, если таковой имеется.Это не так много работы, но если с помощью Drupal вы можете просто извлечь значение $ _GET ['q'], почему никто так не поступает?Каковы недостатки, если таковые имеются?

Спасибо.

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Недостатком использования параметра q является то, что без перезаписи URL URL будет выглядеть так ...

http://domain.com/?q=something

... в отличие от очистителя (ИМО) ...

http://domain.com/index.php/something
0 голосов
/ 04 октября 2011

Причина, по которой техника с более короткими URL-адресами используется в основном, заключается в более чистой технике и лучшем SEO, который исходит от нее.Поисковые системы считают эти два URL «одинаковыми»:

http://www.domain.com/?b=something

http://www.domain.com/?b=hello

У меня нет хорошего объяснениявот несколько ссылок с действительно полезной информацией:


Теперь некоторые люди по-разному используют более короткие URL-адреса, но я нашел, что они работают лучше для меня:

В .htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

В index.php (или в другом php-файле)

if(isset($_GET['route']) && $_GET['route'] != NULL && strlen($_GET['route']) > 0)
{
    $split = explode('/', $_GET['route']);
    for($i=1; $i <= count($split)-1; $i++)
    {
        $_GET[$i] = $split[$i];
    }
}

Это позволяет вам использовать $ _GET ['1'] (или $ _GET [1]) и всепоследующие числа также.

URL тогда выглядят так:

http://www.domain.com/?b=something

становится

http://www.domain.com/something

http://www.domain.com/?b=something&a=hello&c=blah

становится

http://www.domain.com/something/hello/blah

И затем к параметрам можно получить доступ:!

0 голосов
/ 04 октября 2011

Нет больших преимуществ или недостатков, так как URL переписывается. Однако я укажу на все, включая и после того, как последний слэш будет сохранен в _SERVER[PATH_INFO], поэтому анализ URI запроса может не понадобиться.

...