How to do 301 redirect to Sub page using htaccess file?

Redirect 301 /services /services/service-1

This results in a redirect loop because the mod_alias Redirect directive is prefix matching. So, the source path /services matches the redirected path /services/services-1, etc. etc.

However, since you are already using mod_rewrite (as part of WordPress), you should also perform this redirect using mod_rewrite (as opposed to mod_alias). Different modules execute at different times during the request (mod_rewrite before mod_alias), despite the apparent order in .htaccess, so this can lead to some unexpected conflicts.

So, instead, try the following before your existing WordPress front-controller (ie. before the # BEGIN WordPress comment):

RewriteRule ^services$ /services/service-1 [R=302,L]

This matches the URL /services only. Note there is no slash prefix on the RewriteRule pattern when used in .htaccess.

This is a temporary (302) redirect. Change this to a 301 if this is intended to be permanent, but only after you have confirmed it is working OK. (301s are cached hard by the browser by default, so can make testing problematic.)

UPDATE: To make the above work with (or without) a trailing slash on the end of the requested URL then change the above to:

RewriteRule ^services/?$ /services/service-1 [R=302,L]

And if your target URL should have a trailing slash as well, then append this on the substitution. ie. /services/service-1, otherwise WordPress will either issue another redirect or you potentially create a duplicate content issue.