Конвертировать оригинальный 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 " означает:
- Кто-то либо вводит this2 в своей адресной строке, либо щелкает ссылку this2.
- Сервер видит запрос на это2
- Сервер имеет набор правил для внутренней переписывания запроса с this2 на this1
- this1 подается в браузер
Обратите внимание, что важной концепцией всего этого является то, что браузер запрашивает ссылку "this2", а сервер внутренне переписывает запрос на "this1". Но это, вероятно, совсем не то, что вам нужно, потому что тогда вы будете брать уродливые URL-адреса и переписывать их в красивые URL-адреса, упуская из виду дружественные URL-адреса.
Слишком часто, особенно здесь, люди спрашивают что-то вроде: "Я хочу изменить этот URL-адрес на этот URL-адрес" или просить переписать, когда есть двухэтапный процесс перенаправления. Это 2-й шаг (который вы вообще не запрашиваете), который принимает this1 и перенаправляет браузер на this2, так что адресная строка URL изменяется на this2:
- Кто-то либо вводит this1 в своей адресной строке, либо щелкает ссылку this1.
- Сервер видит запрос на это1
- Сервер имеет набор правил для внешнего перенаправления браузера на this2.
- Адресная строка браузера теперь говорит следующее2
- Браузер запрашивает это2
- Сервер видит запрос на это2
- Сервер имеет набор правил для внутренней переписывания запроса с this2 на this1
- 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 все еще передаются в сценарий.