用htaccess隐藏文件名

时间:2010-09-14 09:58:27

标签: apache url .htaccess cgi

我的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

我需要改变什么?

非常感谢你的帮助!

1 个答案:

答案 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