我试图让 SSI 在运行 Apache 的 Debian 上工作,但是.shtml文件没有被解析。从 PHP 文件中,phpinfo()我可以看到加载的模块部分显示以下内容:
mod_mime_xattr mod_mime mod_mime_magic
Run Code Online (Sandbox Code Playgroud)
在/etc/apache2/mods-enabled/mime.conf我有(除其他外):
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Run Code Online (Sandbox Code Playgroud)
在/etc/apache2/sites-enabled/domain.com.conf(对于有问题的虚拟主机)我有:
<Directory /home/username/public_html>
Options +Includes
allow from all
AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)
为了更好地衡量,我还添加了以下内容:
<Directory />
Options +Includes
</directory>
Run Code Online (Sandbox Code Playgroud)
在用户的.htaccess文件中,我尝试添加:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
Run Code Online (Sandbox Code Playgroud)
似乎没有任何效果。我怎么能调试呢?
编辑:
这是输出,ls /etc/apache2/mods-enabled/以防万一
actions.conf dav_svn.load proxy_balancer.load
actions.load deflate.conf proxy.conf
alias.conf deflate.load proxy_connect.load
alias.load dir.conf proxy_http.load
auth_basic.load dir.load proxy.load
auth_digest.load env.load python.load
authn_file.load …Run Code Online (Sandbox Code Playgroud) 我正在一个站点上工作,在该站点上我使用 SSI 在 HTML 页面上设置一个被解析的变量,然后在mod_rewrite重写后由脚本获取该变量。这适用于我的本地设置,但由于某种原因它不适用于生产服务器(两者都是 apache 2.2.22)。以下是相关位:
该perl脚本:
my $working = ($ENV{'HTTP_my_var'} || $ENV{'REDIRECT_HTTP_my_var'}) || "NO";
print "Content-type: text/html\n\n";
print "is it working? <b>$working</b>";
Run Code Online (Sandbox Code Playgroud)
相关线路来自 .htaccess
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteRule ^my_tst$ /cgi-bin/my_tst.cgi [L]
Run Code Online (Sandbox Code Playgroud)
HTML文件:
<!--#set var="HTTP_my_var" value="YES" -->
<!--#include virtual="/cgi-bin/my_tst.cgi" -->
<br>
<!--#include virtual="/my_tst" -->
Run Code Online (Sandbox Code Playgroud)
这是我本地机器上的结果:
它在工作吗?是的
它在工作吗?是的
但是在生产服务器上:
它在工作吗?是的
它在工作吗?不
比较服务器配置,唯一真正想到的是生产服务器httpd -M上没有列出 apreq_module (shared),本地服务器也没有列出 fcgid_module (shared)(等等)。可能是由于这些吗?是什么导致了这种奇怪的行为不匹配?
在情况下,它需要提的是,当我做的转储%ENV,没有 …
mod-rewrite .htaccess suexec server-side-includes apache-2.2
我在网上找到了信息,但对我来说没有意义。我想确切地知道我应该进入哪些文件,以及我应该在哪里以及如何修改它们。
我想在一堆页面中包含一个标题,如下所示:
header.html:
<html>
<head>
<title>My site</title>
</head>
Run Code Online (Sandbox Code Playgroud)
为了启用特定于页面的标题,我尝试使用我在每个页面中设置的 SSI 变量:
page1.html:
<!--#set var="TITLE" value="first page" -->
<!--#include file="header.html" -->
Run Code Online (Sandbox Code Playgroud)
然后我正在修改header.html以使用该变量:
<title>My site - <!--#echo var="TITLE" --></title>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但当然,它有一个不幸的影响,如果TITLE没有设置,结果是:
<title>My site - (none)</title>
Run Code Online (Sandbox Code Playgroud)
因此,我正在尝试各种尝试,echo根据它是否none存在(例如,<!--#if expr="TITLE != \(none\)" --> ... <!--#endif-->)来有条件地对该变量进行调整……但似乎没有任何效果。
似乎这将是一个非常普遍的要求。有没有人参考工作解决方案?
我正在一个网站上工作,实现为 shtml,当我尝试从 IE8加载主页 ( http://simplyclassicremodeling.com ) 时,它说它无法打开文件,因为它作为内容类型传输“文本.html”。该页面从 Chrome 加载正常,并在 Firefox 中加载(有一些与此处无关的 CSS 问题)。
httpd.conf 有:
Options Includes Indexes FollowSymLinks ExecCGI
AddHandler cgi-script .cgi .pl
AddType text/html .shtml
AddHandler server-parsed .shtml
Run Code Online (Sandbox Code Playgroud)
再往下:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript application/javascript
Run Code Online (Sandbox Code Playgroud)
来自 Telnet 会话的 HTTP 标头是:
GET http://simplyclassicremodeling.com/ HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 27 Jan 2012 21:57:54 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.9-dev DAV/2 PHP/5.2.6
Accept-Ranges: bytes
Cache-Control: max-age=2592000, public
Expires: Sun, 26 Feb 2012 21:57:54 …Run Code Online (Sandbox Code Playgroud) 我无法让 SSI 在 NGINX 上工作。如果您点击http://www.bakerycamp.com/test.shtml ,您可以看到问题。这是该文件的内容:
<!--# echo hi -->
Run Code Online (Sandbox Code Playgroud)
如果你在浏览器中点击这个,你会在内容中看到 SSI 指令——显然 NGINX 没有解释 SSI 指令。
我的 NGINX 配置文件如下所示:
server {
listen 80;
server_name bakerycamp.com www.bakerycamp.com;
access_log /var/log/nginx/bakerycamp.access.log;
index index.html;
root /home/bakerycamp.com;
location / { ssi on; }
# Deny access to all hidden files and folders
location ~ /\. { access_log off; log_not_found off; deny all; }
}
Run Code Online (Sandbox Code Playgroud)
我没有从源代码构建 NGINX,而是使用 apt-get 安装它。我假设它有 SSI 模块(因为这是默认的)但也许没有?我应该硬着头皮从源头重建吗?无论如何,是否可以判断已安装的 NGINX 是否支持 SSI 并且我的配置是错误的?