Плюсы / минусы использования index.php? Q = путь / вместо index.php / path / при маршрутизации URL-адресов?

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

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

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

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

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

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

Благодарю.

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

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

… в отличие от уборщика (ИМО) …

 http://domain.com/index.php/something 

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

Причина, по которой используется более короткая методика 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

И тогда параметры могут быть доступны через:

 $_GET[1] = "something"; $_GET[2] = "hello"; $_GET[3] = "blah"; 

Надеюсь, это поможет!