PHP версии 7.1 чистые URL - PullRequest
       14

PHP версии 7.1 чистые URL

0 голосов
/ 02 января 2019

у меня есть index.php точно такой же, как этот

<code>echo "<h2>index page</h2>";
$url=explode("/",$_SERVER['QUERY_STRING']);
echo "<pre>";
print_r($url);
print_r($_SERVER['QUERY_STRING']);
echo "
";

и еще один, в той же папке, profile.php с тем же кодом

<code>echo "<h2>profile page</h2>";
$url=explode("/",$_SERVER['QUERY_STRING']);
echo "<pre>";
print_r($url);
print_r($_SERVER['QUERY_STRING']);
echo "
";

Я пытаюсь создать очень простую систему маршрутов с чистыми URL. Когда URL-адрес, как это http://localhost/vas/aaa/bbb я получаю из index.php следующий результат, который в порядке:

страница указателя массив ( [0] => ааа 1 => bbb ) ааа / ГЭБ

изображение экрана индекса

но, когда я набираю это: http://localhost/vas/profile/john/21, я включаю профиль в URL в качестве первой части URL, я получаю это:

Страница профиля массив ( [0] => )

принтскрин-изображение профиля

Это означает, что без какой-либо маршрутизации я запускаю файл profile.php, и в результате получается пустой массив url без - НАИБОЛЕЕ важных - ожидаемых параметров, например. Джон / 21. Почему в php 7 * включена маршрутизация как функциональность? это мой файл .htaccess:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [QSA,L]

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Некоторые объяснения вашего текущего .htaccess:

Первые 2 строки задают условие для перезаписи URL, в вашем случае оно будет перезаписано, если указанная папка или файл в URL не найдены:

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

Тогда правило перезаписи указывает, что переданный URL-адрес должен быть передан index.php в виде строки запроса:

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

Так что, если у вас нет другого.Правила htaccess, когда вы вызываете этот URL http://localhost/vas/profile/john/21, вы не должны заканчиваться на profile.php, потому что вы не указываете имя файла в URL.В итоге вы должны получить index.php с вашим URL-адресом в качестве параметра.

Однако, если папки vas/profile/john/21/ действительно существуют и в них есть index.php, это файл, который будет вызываться, но потому чтоперезапись не будет применяться, у вас не будет строки запроса.

Возможно, здесь происходит что-то еще, другие правила .htacces, которые перенаправляют /profile/ на profile.php или что-то, что объясняет, что вы правильно пришли кэтот файл.Дополнительная информация может быть полезна ..

0 голосов
/ 02 января 2019

Я предлагаю вам использовать функцию parse_url () и способ перенаправления всех запросов на index.php в apache

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
...