Переписывание seo-url в URL со строкой запроса

#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.php

5. Я понимаю, но посмотрите на это, они могут это сделать: zpag.es/api/4947102a15cb93454e1c7d76c130f83a/uid/5892/domain /…