$_GET URL от ?url=http://google.com

#php #.htaccess

#php #.htaccess

Вопрос:

Я создаю скрипт перенаправления для своего сайта, я использую htaccess для перезаписи URL, чтобы он выглядел лучше.

например. http://localhost/r/http://google.com это URL, но когда я печатаю значение, оно отображается вот так http:/google.com .Не хватает
одного / , как я могу это исправить?

Редактировать:
Правило перезаписи:
RewriteRule ^r/(.*)/$ /system/offsite/redirect/index.php?url=$1 [L]

Спасибо за любую помощь 🙂

Комментарии:

1. Может быть, вам следует показать нам свои правила перезаписи.

2. urlencode() / urldecode() может решить эту проблему

3. ^ r /(.*)/$ ожидает, что / в конце адреса будет перенаправлено, как localhost/r/ http://google.com/ поэтому его удаление может решить вашу проблему

Ответ №1:

Такое поведение связано с Apache, который удаляет пустые сегменты пути перед его отображением. Но вы можете получить доступ к исходному запрошенному пути URI через THE_REQUEST:

 RewriteCond %{THE_REQUEST} ^GET /r/([^ ] )
RewriteRule ^r/ /system/offsite/redirect/index.php?url=%1 [L]
  

Ответ №2:

Используйте функцию php urlencode

Редактировать:

 //echo your url
echo 'http://localhost/r/'. urlencode('http://google.com');
  

и в вашем index.php файл

 //get your url
$url = urldecode($GET['url']);
  

Комментарии:

1. Я пробовал это, это с помощью urlencode() http:/google.com . Это может быть правилом перезаписи.

2. @NoobiCake: Так и должно быть. Расшифруйте это в redirect.php .

Ответ №3:

Я думаю, что переменная REQUEST_URI будет иметь правильный текст. Используйте его следующим образом:

 Options  FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_URI} ^/r/(.*)$
RewriteRule ^r/ /system/offsite/redirect/index.php?url=%1 [L,QSA,NC]