htaccess шаблон переписать с полным URL-адресом в пути - PullRequest
0 голосов
/ 19 сентября 2018

Как мне настроить переписывание шаблона htaccess, если путь перезаписи URL-адреса содержит URL-адрес?

Что-то вроде:

https://mysite.test/results/http://mycrawled.site/page/

Я видел такое поведение на веб-сайте hubspots grader.

Это мое текущее правило перенаправления:

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

С текущим правилом любые двойные слэши в параметре запроса url преобразуются в одиночные слэши

Такие как: Сhttp://mycrawled.site до http:/mycrawled.site.

Как мне исправить это переписывание, чтобы параметр url не изменился?

Обновление

Итакпосле некоторого тестирования я нашел причину проблемы.Существует правило удаления косой черты, которое удаляет второй слеш из URL

# Remove Trailing Slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [r=301,l]

Как обойти этот конфликт?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Другая возможность может состоять в проверке части http: (или https:) на совпадение, после этого для домена и, наконец, для удаленного пути.После этого просто объедините снова.

Преимущество: вы можете явно проверить доменное имя для использования https, и вы можете использовать доменное имя отдельно.В приведенном ниже примере (не проверено!) Вы можете переместить двоеточие в первый матч.В этом случае вы можете использовать правило и для не-URL (хотя я бы посоветовал этого не делать).

RewriteRule ^results/(https?)://(.*?)/(.*)$ /tpl/results.php?url=$1://$2/$3 [L,QSA]

Итак, при использовании вашего примера http://mycrawled.site/page:

  • $ 1 = http или https (здесь: http)
  • $ 2 = имя домена (здесь: mycrawled.site)
  • $ 3 = путь (здесь: страница)
0 голосов
/ 19 сентября 2018

Кодируйте значение и передайте его по URL.Делая это, вам не нужно беспокоиться о значении и косых чертах.в конце декодируйте значение, и вы получите точный результат

$fullURL = 'http://your-website.com/results.php?url=' + urlencode('http://example.com'); 

, а затем расшифруете его позже

$result = urldecode($_GET['url']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...