Чтобы выполнить основную часть переписывания, вам нужно изменить существующие правила и добавить дополнительное для обработки второго случая:
RewriteEngine on
RewriteRule ^Trades-Services-(.+)-([0-9]+)$ /Trades-Services.php?cat=$1&ad=$2 [L,NC]
RewriteRule ^Trades-Services-(.+)$ /Trades-Services.php?cat=$1 [L,NC]
Это должно охватывать 3 из 4 ваших требований, кромедля первого:
Где он также бросает привязку (# 123)
Фрагмент URL, бит # 123 , имеет видобрабатываются браузером, и когда в URL есть #name, фрагмент #name никогда не отправляется на сервер.Так что сервер никак не может знать о фрагменте, это то, что видит браузер, и браузер ищет привязку в документе.Что-то, что вы можете сделать, это перенаправить , чтобы получить привязку.Первое правило будет выглядеть следующим образом:
RewriteRule ^Trades-Services-(.+)-([0-9]+)$ /Trades-Services.php?cat=$1&ad=$2#$2 [L,NC,R]
Однако, когда кто-то вводит http://website.com/Trades-Services-Plumber-123 в адресную строку своего браузера, это правило перенаправит браузер на http://website.com/Trades-Services.php?cat=Plumber&ad=123#123,, таким образом, чтов адресной строке их браузера меняется на php URI.Это не то же самое поведение, которое вы используете в своем исходном правиле (которое перенаправляет внутренне на стороне сервера, сохраняя то, что находится в адресной строке браузера).Другая вещь, которую вы можете сделать, это когда вы генерируете ссылки типа http://website.com/Trades-Services-Plumber-123,, убедитесь, что к нему добавлен фрагмент: http://website.com/Trades-Services-Plumber-123#123.