我的Perl应用程序在我的主机帐户上运行时显示地址栏中的文件名'processing.cgi',但在localhost上它似乎工作正常,也就是说,它没有显示文件名'processing.cgi'。
这两个位置的.htaccess完全相同:
AddHandler cgi-script .cgi
Options +ExecCGI
IndexIgnore *
DirectoryIndex processing.cgi
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ processing.cgi/$1
RewriteRule ^$ processing.cgi [L]
RewriteRule ^/$ processing.cgi [L]
这是/ public_html中的.htaccess:
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.main-domain\.com$ [NC]
RewriteRule ^(.*)$ http://main-domain\.com/$1 [R=301,L]
# BEGIN WordPress
# <IfModule mod_rewrite.c>
# RewriteEngine On
# RewriteBase /
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
# </IfModule>
# END WordPress
我需要改变什么?
非常感谢你的帮助!
答案 0 :(得分:3)
使用当前设置,如果您在浏览器位置栏中输入http://example.com/
,则无法在此类位置栏中看到processing.cgi
,除非您的Perl脚本执行HTTP重定向(通过发送{ {1}}标题)。所以我建议你仔细检查你的Perl代码。
无论如何,我看到在文件周围随机散布的许多指令似乎是什么。我认为如果我解释它们的含义会更有成效:
Location
启用CGI脚本并映射* .cgi扩展名,以便以AddHandler cgi-script .cgi
Options +ExecCGI
结尾的任何文件都被视为程序。
.cgi
指示Apache生成空目录列表。当人们不想要目录列表时,他们通常只是禁用它们:IndexIgnore *
Options -Indexes
当URL指向目录时,在此目录中查找并显示名为DirectoryIndex processing.cgi
的文件。您是否计划在网站的每个目录上维护Perl程序的副本?
processing.cgi
如果URL未映射到现有文件或目录......
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
当用户类型RewriteRule ^(.*)$ processing.cgi/$1
实际运行http://example.com/foo/bar.jpg
时。看看是否有其他规则匹配。
http://example.com/processing.cgi/foo/bar.jpg
当用户类型RewriteRule ^$ processing.cgi [L]
实际运行http://example.com
时。我们完成了规则。
http://example.com/processing.cgi
当用户类型RewriteRule ^/$ processing.cgi [L]
实际运行http://example.com/
时。我们完成了规则。
现在很清楚,你有很多冗余的规则。您的确切需求并非100%明确,但我想您可以保存删除大部分指令:
http://example.com/processing.cgi