apache添加尾部斜杠重定向到不同的ServerName

时间:2015-03-18 01:40:13

标签: apache .htaccess redirect

在apache 2.2.22中,我有多个本地服务器设置,以便localhostN引用我可以通过local.myserver.com访问的服务器(对于不同的" myserver" s)。问题是一个这样的服务器在添加自动斜杠时做了一个奇怪的重定向(我通过mod_dir猜测),访问:

http://local.myserver.com/noslashdir

发给我

http://localhost5/noslashdir/

而不是

http://local.myserver.com/noslashdir/

我无法在.htaccess文件中覆盖此行为。以下是相关细节:

/noslashdir/.htaccess:

DirectoryIndex index.html

/ htaccess的:

SetEnvIf HTTPS on http_proto=s
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^noslashdir/(.*)$ /noslashdir/$1.html [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^noslashdir/(.+)\.html$ http%{http_proto}://%{HTTP_HOST}/noslashdir/$1 [L,R=302]

/etc/httpd/httpd.conf

<VirtualHost 127.0.0.5>
    ServerName localhost5
    DocumentRoot /var/www/myserver.com/
    DirectoryIndex  index.php index.html index.htm index.shtml 
    <Directory "/var/www/myserver.com">
            Options Indexes +Includes FollowSymLinks
            AllowOverride All
            Allow from all
            Order allow,deny
    </Directory>
    ScriptAlias /cgi-bin/ "/var/www/myserver.com/cgi-bin/"
</VirtualHost>

的/ etc /主机

127.0.0.5   local.myserver.com  localhost5

我已尝试RewriteRule s,DirectorySlash Off等,但到目前为止还没有任何工作。所有其他所需的重定向都可以正常工作。

1 个答案:

答案 0 :(得分:1)

在创建“自引用网址”时,Apache正在使用您为VirtualHost设置的ServerName

http://httpd.apache.org/docs/2.2/en/mod/core.html#servername

  

ServerName指令设置服务器用于标识自身的请求方案,主机名和端口。这在创建重定向URL时使用。“

您应该将UseCanonicalName设置为Off

  

“在许多情况下,Apache必须构建一个自引用URL - 即引用回同一服务器的URL。使用UseCanonicalName On Apache将使用ServerName指令中指定的主机名和端口来构造服务器的规范名称。此名称用于所有自引用URL,[...]
  使用UseCanonicalName Off Apache将使用客户端提供的主机名和端口形成自引用URL(如果有的话)[...]“