For the third time in three years, Louisville City FC punched their ticket to the Eastern Conference Finals following a 1-0 win over the Rochester Rhinos at Slugger Field Saturday night.

A 77th-minute goal by second-half substitute Brian Ownby capped off a hard-fought night where City did not play their best. But the quality and work ethic of the Virginia native was enough to send the boys in purple to a place that seems all too familiar.

The opening 20 minutes of the game went the way Rochester had planned. The Rhinos pushed forward and went with the high press, not allowing City to find their rhythm while creating chances of their own. The purple shirts still dominated possession, but with nothing to show for it.

Rochester would rue not converting in the 23rd minute after creating chance after chance. Jordan Dover did everything but score after he dispossessed Oscar Jimenez, then beelined 60 yards into the box. With no one challenging him, Dover had a 1v1 with Louisville goalkeeper Greg Ranjitsingh but dragged his shot wide of the left post.

City’s only real chance came in the 33rd minute via Luke Spencer. He gathered in the ball in the box, then turned and shot on goal, But without a good look before firing, he went wide right.

City enjoyed 57% possession in the first half, but it was Rochester who had the boys in purple on the back foot. Nothing offensively was working. The Rhinos matched City with the identical 3-4-3 formation and simply marked their opposing man. Jimenez and Kyle Smith, two influential figures going forward were quiet throughout the entire first half.

Louisville coach James O’Connor opted for a double-switch, bringing on Ownby and Mark-Anthony Kaye at halftime. Rochester kept up the high pressure in the second half and continued to make City work for everything. But Ownby’s work ethic, finding space in behind with pace, gave City a new look that kept their back line, who were still floundering, a much-needed break.

Ownby rewarded O’Connor for the substitution with a goal in the 77th minute. At midfield, Ownby received a pass and laid off to Smith. The Cincinnati native played it right back to Ownby, who raced to the box. Ownby got to the ball before Rochester goalkeeper Tomas Gomez and chipped his shot over to make Rochester’s work prior all for naught.

Ownby came close to killing the game off seven minutes later with a half-volley. The Virginia native chested down the ball Rochester couldn’t clear and fired from 20 yards out to the upper right post, but Gomez made a huge save to keep the Rhinos in the game.

The Rhinos launched an all-out attack in the waning stages of the game in search of an equalizer and had a great chance in the 91st minute. Two Rhino players headed the cross sent into the box, but the ball went to the wrong side of the left post.

City had another chance to kill the game off in the 93rd minute on a breakaway. Spencer intercepted a ball at midfield launching the counterattack. Spencer played a through ball to Ownby, who bolted to the Rhino goal. He cut back and laid off to a wide open Kaye, who fired but forced a big save from Gomez to give Rochester one last shot to tie. Ranjitsingh saved the last-ditch free kick to give City the win.

After pulling off the upset of No. 3 seed Tampa, the No. 7 seed and defending USL champions New York Red Bulls II and Louisville will meet for the second consecutive season, this time at Slugger Field on Saturday, Nov. 4. Kickoff is slated to begin at 7:30 p.m.