Обычно к PHP-сценариям обращаются напрямую, аналогично CGI-сценарию - в основном вы обращаетесь к сценарию, как к любому обычному файлу, но веб-сервер перехватывает этот запрос, запускает сценарий и возвращает вывод вместо содержимого файла.
Большинство фреймворков Python имеют свои собственные системы маршрутизации, где вы определяете что-то вроде ..
urls = (
('^/article/(\d+)$', ArticleController),
('^/user/(.+?)$', UserController)
)
..то вы получите доступ к чему-то вроде ..
http://example.com/router.py?uri=article/123
... и он будет проходить через сопоставление URL-адресов , определенное в urls
адресах, и отправит запрос соответствующему классу ... но иметь часть router.py
во всех ваших URL-адресах - это немного глупо, поэтому вы используете mod_rewrite
для перенаправления /(.*)
в /router.py/$1
(либо через .htaccess
, вашу конфигурацию Apache и т. д.)
Вы можете сделать то же самое с PHP или любым другим языком - именно так работает CodeIgniter (среда PHP)
Если вы совершенно безумны, вы можете использовать mod_rewrite
и сопоставить /user/(\d+).py
с /ViewController.php?id=$1
или что-то, но обычно нет никакого смысла добавлять поддельное расширение на страницу (есть несколько исключений, в основном, с обратной совместимостью и предоставлением доступа к данным в различных форматах в API)
Вы также можете сделать "путь PHP", используя Python, если вы пишете каждую страницу в виде отдельного CGI-скрипта, просто большинство фреймворков Python, как правило, используют настройку MVC (или MVC-подобную), которую я описал выше.