1) Make sure that john has a /home/john/public_html directory, at that this is both world-readable and world-executable:
Code:
ls -l /home/john/public_html
This code should give three 'r's and three 'x'es.
2) Make sure that UserDir is set to public_html in your config file.
3) Check what error is reported in /var/log/httpd/error_log when you try to access the file.
Edit: 4) Also make sure that the public_html directory contains an index.html file that is also world-readable (three 'r's with ls -l).