如何让Drupal 9站点特定子文件夹允许执行Python脚本?
解决Drupal根目录下自定义子文件夹Python脚本无法执行的问题
核心问题出在Drupal根目录的.htaccess规则上——默认情况下,它会把所有非静态文件/目录的请求都导向index.php,导致Python脚本被当作普通文本文件输出,而不是执行。下面是具体解决步骤:
1. 修改根目录的.htaccess,豁免目标子文件夹
找到根目录(public_html/)下的.htaccess文件,定位到RewriteEngine On之后的重写规则段,添加一条排除规则,让Apache跳过对python目录的Drupal路由转发:
RewriteEngine On # 新增:豁免python目录,直接处理该目录下的请求 RewriteCond %{REQUEST_URI} !^/python/ # 保留原有的Drupal重写规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
2. 为python目录配置CGI执行规则
在public_html/python/目录下新建或修改.htaccess文件,添加以下规则,告诉Apache将.py文件当作CGI脚本执行:
AddHandler cgi-script .py Options +ExecCGI
3. 验证Python脚本的shebang头
确保你的Python脚本第一行指定了正确的解释器路径,比如:
#!/usr/bin/env python3
如果不确定服务器的Python路径,可以通过SSH执行which python3命令获取准确路径,替换上面的内容。
为什么放在子目录时能正常运行?
当Drupal部署在public_html/drupal9/时,根目录的.htaccess没有Drupal的重写规则,python目录的请求直接由Apache处理,自然会执行CGI脚本,不受Drupal路由逻辑干扰。
内容的提问来源于stack exchange,提问作者Dean Reeds
相关产品推荐
相关产品推荐

