微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用mod_rewrite隐藏在Web浏览器上访问的Python脚本的.py扩展名

我想隐藏在Web浏览器中加载的Python脚本的.py扩展名,并且仍然运行脚本。 例如:在地址栏inputurl.dev/basics/PythonScript会激发PythonScript.py并在浏览器窗口中显示结果。

URL url.dev/basics/PythonScript获取静态文件/PythonScript.py

浏览器仍然显示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不会redirect到url.dev/basics/PythonScript.py (我得到一个404 Not Found)

背景信息

如何通过.htaccess在URL中允许三个可选参数?

如何激活mod_rewrite?

.htaccess将所有子文件内容(有和没有结束斜杠)redirect到相同的子文件

Apache mod_rewrite一个文件夹的子文件夹(通过内部redirect)

获取mod_rewrite传递$ _GET参数?

A) PHP重写工作:位于url.dev/basics/ WORKS for PHP脚本的.htaccess中的以下内容

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

B) Python重写不起作用:位于url.dev/basics/中的.htaccess中的以下内容不适用于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开始工作的初学程序员:您在Internet软件工程的基础部分中的第一个程序 。 我试图按照build议使用“一个URL =一个文件”,但想使用Python而不是PHP的执行环境。 我意识到,这不是构buildWeb应用程序的最佳方式。 在上面的课程的开始部分,这只是一个惯例。

D)我在OS 10.6 SNow Leopard中设置了虚拟主机开发环境,以便我可以通过adactio.com上的'Hacky Holidays'在url.dev上访问我的开发。 我的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 configured -恢复正常的操作

期待任何帮助!

XAMPP .htaccess mod_rewrite不工作

Apache mod_rewrite接受语言子域redirect

我怎样才能修复Laravel 5.1 – 404找不到?

用于Web翻译的Mod_rewrite .htaccess

我如何忽略mod_rewrite中的目录?

如果你在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 OKnn" 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文件中的更改,所以您可能需要启用httpd.conf文件中的Allowoverride All

<Directory "/"> .... Allowoverride All </Directory>

我找到了解决方案:我需要添加应用程序的MIME类型,以便Apache Web服务器了解它应该运行的代码

在url.dev/basics/.htaccess中添加

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

别忘了重启Apache: sudo apachectl graceful

它的工作原理! http://url.dev/basics/PythonScriptPythonScript.py中运行代码&#xFF01; 请注意,我不确定这是否是最好的方法,但它的工作原理。

这是我完整的.htaccess文件

# Options +ExecCGI # SetHandler cgi-script <Ifmodulee mime_module> AddType application/x-httpd-py .py </Ifmodulee> <Ifmodulee mod_rewrite.c> RewriteEngine On RewriteBase /basics/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.py -f RewriteRule ^(.*)$ $1.py </Ifmodulee>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐