Назад | Перейти на главную страницу

Как переписать эти URL?

Я новичок в переписывании 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

В $ символ является привязкой конца строки, что означает, что выражение будет соответствовать, только если входная строка заканчивается в этой точке. Удалив $ мы удаляем это требование и поэтому игнорируем любые завершающие символы.