#apache #mod-rewrite #url-rewriting
#apache #мод-переписать #url-переписывание
Вопрос:
Я хочу использовать mod_rewrite для создания URL-адресов, подобных этому:
http://domain.tld/id/1/type/2/url/http://domain2.tld
Как я могу это сделать?
Комментарии:
1. Каким вы хотите, чтобы URL стал после перезаписи? Это важная информация, чтобы знать, как создать правило mod_rewrite.
2. @Chris У меня есть API, подобный этому: api.php?uid=1 amp; args = 1 amp;url = domain.tld , и я хочу использовать mod_rewrite для этого.
Ответ №1:
Поместите этот код в свой файл .htaccess:
Options FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/ id/([^/]*)/type/([^/]*)/url/(http://)?(.*)$ [NC]
RewriteRule ^ /api.php?uid=mp;type=*mp;url=%3%4 [L,NE]
Это будет поддерживать как /id/1/type/2/url/http://domain2.tld
, так и /id/1/type/2/url/domain2.tld
URI.
Ответ №2:
Теперь мы в деле! Создайте .htaccess
файл, затем добавьте эти строки:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^id/(.*)/type/(.*)/url/http:/(.*)$ api.php?uid=$1amp;type=$2amp;url=$3 [L]
Обратите внимание, что в конечном итоге это будет передано domain2.tld
в качестве url
параметра — вам придется добавить «http: //» обратно для себя. Как мы обсуждали в комментариях, вам лучше использовать правильно сформированные URL-адреса с помощью urlencode
, но если это не вариант, сойдет и этот.
В Интернете нет недостатка в информации о mod_rewrite
. Вот блог:http://www.htmlist.com/how-to/a-simplemod_rewrite-tutorial / — всего лишь один из многих результатов, если вы ищете «mod_rewrite» в Google.
Комментарии:
1. Я уже пробовал это, но не работает. После url / мне нужно использовать http: //domain.tld, и это не работает.
2. А) Я не понимаю, что вы имеете в виду, говоря «используйте http: //domain.tld, и это не сработает», и Б) было бы неплохо, если бы вы включили то, что вы уже пытались, чтобы мы не тратили наше время , предлагая то, что вы уже пробовали. Принципы, изложенные в этом фрагменте htaccss, работают — я взял его прямо из рабочего файла htaccss на моем собственном сайте. 🙂 Отредактируйте свой вопрос и включите ВСЕ соответствующие детали, включая то, что вы уже пробовали.
3. У меня есть ссылка, подобная этому api.php?uid = 1 amp; args = 1 amp;url = http: //domain.tld (без пробела между http: и //), и я хочу переписать эту ссылку, но с ^id / (.*) /type / (.*)/url / (.*) $ последний синтаксис не работает, мой php не получает 3 доллара. Без mod_rewrite все в порядке, но с режимом перезаписи не работают 3 доллара (amp;url = 3 доллара). Я не знаю, как объяснить больше.
4. Проблема может заключаться в том, что недопустимо передавать URL, не закодированный в URL, в качестве параметра строки запроса. Эта
url=
часть должна быть закодирована, такhttp://domain2.tld
и должно бытьhttp://domain2.tld
. Причина сбоя правила mod_rewrite заключается в незакодированных косых чертах. Смотри также: php.net/manual/en/function . urlencode.php5. Я понимаю, но посмотрите на это, они могут это сделать: zpag.es/api/4947102a15cb93454e1c7d76c130f83a/uid/5892/domain /…