Normalmente scripts PHP são acessados diretamente, similarmente a um script CGI - basicamente você acessa o script como qualquer arquivo regular, mas o servidor web intercepta esta requisição, executa o script e retorna a saída ao invés do conteúdo do arquivo.
A maioria dos frameworks Python tem seus próprios sistemas de roteamento, onde você define algo como:
urls = (
('^/article/(\d+)$', ArticleController),
('^/user/(.+?)$', UserController)
)
.. então você acessaria algo como ...
http://example.com/router.py?uri=article/123
.. e seria executado através do mapeamento de URL definido em urls
, e enviar a solicitação para a classe apropriada ... mas ter a parte router.py
em todas as suas URLs é um pouco ruim, então você usa mod_rewrite
para redirecionar /(.*)
para /router.py/$1
(seja via .htaccess
, sua configuração do Apache, etc)
Você pode absolutamente fazer a mesma coisa com PHP, ou qualquer outra linguagem - isso é exatamente como o CodeIgniter funciona (um framework PHP)
Se você é totalmente insano, você poderia usar mod_rewrite
e mapear /user/(\d+).py
para /ViewController.php?id=$1
ou algo assim, mas geralmente não há razão para adicionar uma extensão falsa à página (há um poucas exceções, principalmente compatibilidade com versões anteriores e permissão de acesso a dados em diferentes formatos em uma API)
Você também pode fazer o "modo PHP" usando Python, se você escrever cada página como um script CGI separado, a maioria das estruturas Python tendem a usar a configuração MVC (ou MVC) que descrevi acima.