%{HTTP_HOST}的rewritecond是否被忽略?

时间:2018-10-26 08:54:48

标签: .htaccess

我有多个域指向服务器上的同一文件夹。 index.php页面中的代码可以识别正在访问哪个域,并为每个域显示不同的内容。

现在,我希望www.domain-a.com\sitemap.xml打开/sitemap-a.xml,以便每个域都有自己的站点地图。

我在.htaccess文件中使用以下规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^.*domain-a\.com$
RewriteRule ^sitemap.xml$ sitemap-a.xml [NC]

但是,如果我访问www.domain-a.com\sitemap.xml,则会显示文件/sitemap.xml中的内容,而不是文件sitemap-a.xml

重定向规则是否错误?如果是这样,我该如何解决?

我正在使用Laravel。这是完整的.htaccess文件:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>
    RewriteEngine On


    RewriteCond %{HTTP_HOST} ^.*domain-a\.com$
    RewriteRule ^sitemap.xml$ sitemap-a.xml [NC]

    # browser request: .php to non-php
    # https://stackoverflow.com/questions/13222850/redirect-php-urls-to-urls-without-extension
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
    RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

    # Now, rewrite any request to the wrong domain to use www.
    # [NC] is a case-insensitive match
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    RewriteCond %{HTTPS} off
    # First rewrite to HTTPS:
    # Don't put www. here. If it is already there it will be included, if not
    # the subsequent rule will catch it.
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:1)

您可以尝试以下规则吗?恰好在上方# Handle Authorization Header行:

RewriteCond %{HTTP_HOST} (?:^|\.)domain-a\.com$ [NC]
RewriteRule ^sitemap\.xml$ /sitemap-a.xml [L,NC]