Я новичок в переписывании URL. Я использую модуль перезаписи Apache на IIS 7.5 (я думаю). В любом случае, я могу успешно переписывать текст, но у меня проблемы с некоторыми ключевыми моментами.
Я хочу, чтобы этот красивый URL-адрес был переписан на этот уродливый URL-адрес:
mydomain.com/bike/1234 (pretty)
mydomain.com/index.cfm?Section=Bike&BikeID=1234 (ugly)
Это прекрасно работает со следующим правилом:
RewriteRule ^bike/([0-9]+)$ /index.cfm?Section=Bike&BikeID$1
Выпуск # 1
Я хочу иметь возможность добавить описание и поместить его в одно и то же место, чтобы полезная информация полностью игнорировалась моим приложением.
mydomain.com/bike/1234/a-really-great-bike (pretty and useful)
mydomain.com/index.cfm?Section=Bike&BikeID=1234
Выпуск # 2
Мне нужно добавить второй или третий параметр и значение к URL-адресу, чтобы получить дополнительную информацию для базы данных, например:
mydomain.com/bike/1234/5678
mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678
Это работает по следующему правилу:
RewriteRule ^bike/([0-9]+)/([0-9]+)$ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2
Опять же, мне нужно добавить дополнительную информацию, как в первом примере:
mydomain.com/bike/1234/5678/a-really-great-bike (pretty and useful)
mydomain.com/index.cfm?Section=Bike&BikeID=1234&FeatureID=5678
Итак, как я могу объединить эти правила, чтобы у меня был один, два или три параметра, а любые «полезные слова» полностью игнорировались?
Я предполагаю, что это Apache, а не IIS, исходя из ваших примеров. Вам действительно следует изучить, как работают регулярные выражения, потому что правила перезаписи в основном связаны с вычислением регулярного выражения.
Эти правила перезаписи должны делать то, что вы хотите:
RewriteRule ^bike/([0-9]+)/ /index.cfm?Section=Bike&BikeID$1
RewriteRule ^bike/([0-9]+)/([0-9]+)/ /index.cfm?Section=Bike&BikeID=$1&FeatureID=$2
В $
символ является привязкой конца строки, что означает, что выражение будет соответствовать, только если входная строка заканчивается в этой точке. Удалив $
мы удаляем это требование и поэтому игнорируем любые завершающие символы.