Конвертировать оригинальный URL в дружественный URL

На моем сайте есть ссылка на зарегистрированных репетиторов. Эта ссылка что-то вроде этого

http://www.myweb.com/profiles/tutors/index.php?tutorCode=1285&tutorName=Robert%20Sakoo&city=Sidny

Поэтому мне нужно переписать эту ссылку примерно так:

www.myweb.com/1285/Rober Sakoo

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

2 ответа

Вы, кажется, запутались с тем, как работают URL и перезапись. Понятие "мне нужно переписать this2 в this1 " означает:

  1. Кто-то либо вводит this2 в своей адресной строке, либо щелкает ссылку this2.
  2. Сервер видит запрос на это2
  3. Сервер имеет набор правил для внутренней переписывания запроса с this2 на this1
  4. this1 подается в браузер

Обратите внимание, что важной концепцией всего этого является то, что браузер запрашивает ссылку "this2", а сервер внутренне переписывает запрос на "this1". Но это, вероятно, совсем не то, что вам нужно, потому что тогда вы будете брать уродливые URL-адреса и переписывать их в красивые URL-адреса, упуская из виду дружественные URL-адреса.

Слишком часто, особенно здесь, люди спрашивают что-то вроде: "Я хочу изменить этот URL-адрес на этот URL-адрес" или просить переписать, когда есть двухэтапный процесс перенаправления. Это 2-й шаг (который вы вообще не запрашиваете), который принимает this1 и перенаправляет браузер на this2, так что адресная строка URL изменяется на this2:

  1. Кто-то либо вводит this1 в своей адресной строке, либо щелкает ссылку this1.
  2. Сервер видит запрос на это1
  3. Сервер имеет набор правил для внешнего перенаправления браузера на this2.
  4. Адресная строка браузера теперь говорит следующее2
  5. Браузер запрашивает это2
  6. Сервер видит запрос на это2
  7. Сервер имеет набор правил для внутренней переписывания запроса с this2 на this1
  8. this1 подается в браузер

Так что вся эта круглая свертка такова, что когда браузер пытается перейти к this1, он перенаправляется на this2, но все же фактически получает контент из this1.

Поэтому я предполагаю, что это то, что вы хотите. Попробуйте поместить это в свой файл htaccess:

RewriteEngine On

# check if the actual request if for "this1"
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profiles/tutors/index.php\?tutorCode=([0-9]+)&tutorName=([^&]+)&?([^\ ]+)
# redirect to "this2"
RewriteRule ^profiles/tutors/index\.php /%1/%2/?%3 [R=301,L,NE]

# now rewrite "this2" back to "this1"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/(.+)/$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [L,QSA]

Обратите внимание, что city Параметр никогда не кодируется в дружественном URL-адресе, поэтому он остается частью строки запроса. Вы можете изменить это так, чтобы дружественный URL выглядел следующим образом: /id/name/city/ вместо просто /id/name/Эта модификация должна быть тривиальной.

Это было бы где-то рядом:

RewriteEngine on
RewriteRule ^([0-9]+)/(.+)$ /profiles/tutors/index.php?tutorCode=$1&tutorName=$2 [NC,QSA]

Поскольку вы не указываете, что с этим делать, я не взял ваш city параметр в счет, таким образом добавлен QSA (Query String Append) к правилу, поэтому параметры в GET все еще передаются в сценарий.

Другие вопросы по тегам