#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]