我正面临着我尝试部署的网站的问题。该站点在我的开发主机上运行正常,但部署失败。两个主机都有一个非常相似的配置,都是Ubuntu Linux发行版(dev:11.10,部署:10.04),都使用apache2等。
两个站点都启用了mod_dir,但是部署似乎没有将尾随斜杠添加到目录名称,而开发人员则这样做。所以,当我输入这个URL(删除http以避免愚蠢的stackoverflow反垃圾邮件过滤)时:
devel.mydomain.com/admin
开发主机将其重定向到:
devel.mydomain.com/admin /
部署http://mydomain.com/admin
未被重定向到mydomain.com/admin/,原因不明,我以404错误结束。当然,如果我输入mydomain.com/admin/
,手动添加尾部斜杠,它会按预期工作。但我还想将mydomain.com/admin
重定向到mydomain.com/admin/
问题是为什么在开发中mod_dir似乎正在进行重定向,而在部署中则没有。
我在配置文件中做了一个grep,看看DirectorySlash指令是否在某个地方被禁用而没有找到任何内容。它既没有在devel上显式启用,所以我认为默认情况下应该启用它。无论如何,我将它添加到部署主机上的.htaccess文件中:
上的DirectorySlash
但它也没有用。
任何提示?
答案 0 :(得分:0)
/admin
文件夹受密码保护。我不认为这是相关的,但实际上它是。
此外,我在.htaccess
文件中有这些规则:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]
</IfModule>
基本上,当Apache生成401错误要求浏览器输入密码时,它还会生成另一个不使用任何文件夹,目录或符号链接的请求,因此会将其重定向到index.php
。
解决方法是将其添加到站点根文件夹中的.htaccess
文件:
ErrorDocument 401 /error/null.html
ErrorDocument 403 /error/null.html
并创建该文件,例如:
touch ./error/null.html
这些不是最佳做法,但在寻找更好的解决方案时,他们现在会这样做。