Использование mod_rewrite, чтобы скрыть расширение .py скрипта Python, доступ к которому осуществляется через веб-браузер. - PullRequest
1 голос
/ 05 августа 2010

Я хочу скрыть расширение .py скрипта Python, загруженного в веб-браузер, и все еще запускать скрипт. Например: при вводе url.dev/basics/pythonscript в адресной строке запускается pythonscript.py и отображаются результаты в окне браузера.

  1. URL-адрес url.dev/basics/pythonscript извлекает статический файл /pythonscript.py
  2. Браузер по-прежнему отображает URL url.dev/basics//pythonscript

Ввод url.dev/basics/pythonscript.py РАБОТАЕТ, и отображаются результаты скрипта Python. Я также могу заставить mod_rewrite переписать url.dev/basics/phpscript в url.dev/basics/phpscript.php и успешно запустить код PHP за кулисами.

Но url.dev/basics/pythonscript НЕ перенаправляет на url.dev/basics/pythonscript.py (я получаю 404 Not Found) .

Справочная информация

A) Переписывание PHP работает: в файле .htaccess, расположенном в url.dev/basics/ РАБОТАЕТ для PHP-скриптов, работает следующее:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /basics/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>

B) Переписывание Python НЕ работает: следующее в .htaccess, расположенном в url.dev/basics/, НЕ работает для скриптов Python (я получаю 404 Not Found) :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /basics/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.py -f
RewriteRule ^(.*)$ $1.py
</IfModule>

C) Я начинающий программист, работающий с Упражнение 2: Ваша первая программа в разделе Основы программной инженерии для интернет-приложений . Я пытаюсь следовать рекомендации использовать среду исполнения, где «Один URL = один файл», но хочу использовать Python, а не PHP. Я понимаю, что это не самый лучший способ создать веб-приложение. Это только соглашение, которое будет использоваться во время начальной части курса, указанного выше.

D) Я настроил среду разработки Virtual Hosts в OS 10.6 Snow Leopard, чтобы я мог получить доступ к своей разработке на url.dev в соответствии с «Hacky Holidays» на adactio.com. Моя версия Python - Python 2.6.1.

E) Я планирую в конечном итоге использовать Django, но сначала хочу по возможности поработать над более простым кодом, чтобы я мог лучше понять, что происходит.

F) В моем httpd.conf есть следующее:


TypesConfig /private/etc/apache2/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler cgi-script .py

и

LoadModule php5_module        libexec/apache2/libphp5.so
LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so

G) Моя версия Apache (отображается в журнале сервера после перезапуска сервера): Apache / 2.2.14 (Unix) mod_ssl / 2.2.14 OpenSSL / 0.9.8l DAV / 2 PHP /5.3.1 mod_fastcgi / 2.4.2 настроен - возобновление нормальной работы

С нетерпением ждем любой помощи!

Ответы [ 2 ]

2 голосов
/ 06 августа 2010

Если вы работаете на Linux, не используйте mod-rewrite - переименуйте скрипт.

вы можете вызвать скрипт - pythonscript, а не pythonscript.py

вы добавляете в первую строку скрипта указатель на ваш интерпретатор python

и устанавливаете файл как исполняемый

с

chmod +x pythonscript 

при запуске файла - он прочитает первую строку файла и выполнит интерпретатор в первой строке

#!/usr/bin/python 

, а затемустановите каталог для выполнения скрипта

, чтобы сделать эту работу, вы измените файлы в исполняемом каталоге в вашем файле .htaccess

basics/.htaccess
-----------
Options +ExecCGI
SetHandler cgi-script
-----------

Ваш скрипт на python будет выглядеть так

basics/pythonscript 
-------
#!/usr/bin/python

print "STATUS: 200 OK\n\n" 


print "hello world"
------

Предупреждение ... Вы можете получить ошибку в файле error_log, которая выглядит следующим образом.

[Thu Aug 05 19:26:34 2010] [alert] [client 127.0.0.1] /home/websites/testing/htdocs/basics/.htaccess: Option ExecCGI not allowed here

Если это произойдет, ваш веб-сервер не позволяет вносить изменения из вашего файла .htaccess

Ваш веб-сервер должен иметь возможность разрешать изменения в вашем файле htaccess, поэтому вам может потребоваться включитьAllowoverride All в вашем файле httpd.conf

<Directory "/">

.... 

Allowoverride All

</Directory>
1 голос
/ 27 сентября 2010

Я нашел решение: мне нужно было добавить тип приложения MIME, чтобы веб-сервер Apache понимал, что он должен выполнять код.

В url.dev/basics/.htaccess добавьте:

<IfModule mime_module>
AddType application/x-httpd-py .py
</IfModule>

Не забудьте перезапустить Apache: sudo apachectl graceful

И это работает! http://url.dev/basics/pythonscript запускает код в pythonscript.py! Обратите внимание, что я не уверен, что это лучший способ сделать это, но он работает.

Вот мой полный файл .htaccess:

# Options +ExecCGI
# SetHandler cgi-script

<IfModule mime_module>
AddType application/x-httpd-py .py
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /basics/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.py -f
RewriteRule ^(.*)$ $1.py
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...