【问题标题】:Hiding file name with htaccess使用 htaccess 隐藏文件名
【发布时间】:2011-04-12 02:11:35
【问题描述】:

在我的主机帐户上运行时,我的 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

我需要改变什么?

非常感谢您的帮助!

【问题讨论】:

  • 您是否只是删除了相同的问题并再次发布?这会导致所有附加信息(cmets、答案...)丢失。当您需要提供更多信息时,请随时编辑问题。

标签: apache url .htaccess cgi


【解决方案1】:

在当前设置下,如果您在浏览器位置栏中键入 http://example.com/,除非您的 Perl 脚本执行 HTTP 重定向(通过发送 Location 标头),否则您无法在此类位置栏中看到 processing.cgi .所以我建议你仔细检查你的 Perl 代码。

无论如何,我看到文件周围随机散布着许多指令。我认为如果我解释它们的意思会更有成效:

AddHandler cgi-script .cgi
Options +ExecCGI 

启用 CGI 脚本并映射 *.cgi 扩展名,以便任何以 .cgi 结尾的文件都被视为程序。

IndexIgnore *

指示 Apache 生成空目录列表。当人们不想要目录列表时,他们通常只是禁用它们:Options -Indexes

DirectoryIndex processing.cgi

当 URL 指向一个目录时,在该目录中查找并显示一个名为 processing.cgi 的文件。您是否打算在站点的每个目录中都保留一份 Perl 程序的副本?

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

如果 URL 没有映射到现有文件或目录...

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/ 时实际运行http://example.com/processing.cgi。我们已经完成了规则。

现在很明显,您有很多多余的规则。我不是 100% 清楚您的确切需求,但我想您可以省去大部分指令:

AddHandler cgi-script .cgi
Options +ExecCGI

Options -Indexes

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ processing.cgi/$1 [L]

【讨论】:

  • 非常感谢您的解释。我试过你的规则,结果是403错误。问题是,在使用该应用程序时,我可以在地址栏中看到 processing.cgi。例如,网址为:domain.com/processing.cgi/add。我希望它只是 domain.com/add
  • 我自己测试了这些指令,它们按预期工作。我坚持:您发布的所有指令都不会执行 HTTP 重定向。严重地。你在其他地方有 other 指令吗?你检查过你的 Perl 代码吗?
  • 同一个应用程序(没有任何更改)如何在本地运行而不是在服务器上运行良好。
  • 如果您在其他地方有其他指令,或者 Perl 代码根据环境值进行 HTTP 重定向,这是可能的。
  • 是的,我在 public_html 中也有 .htaccess(此域是托管在 public_html/addondomain.com/ 上的插件域),请参阅我在原始帖子中对 /public_html 中的 htaccess 的编辑跨度>
猜你喜欢
  • 2019-02-23
  • 2010-11-25
  • 1970-01-01
  • 2020-07-05
  • 2016-02-28
  • 2014-03-29
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多