RewriteRule在子文件夹上没有被触发

时间:2014-02-01 03:16:00

标签: php apache .htaccess mod-rewrite redirect

我[可能]有一个不寻常的设置:

  1. 我有1个存储/根文件夹,其中包含多个域和子域 指向同一个文件夹。
  2. 然后我为每个域或子域和我们创建一个子文件夹 .htaccess将域重定向到正确的文件夹/文件
  3. 下面是我如何做到这一点的工作示例

    # Domain1.com
    RewriteCond %{HTTP_HOST} ^spain\.domain1\.com [NC]
    RewriteRule ^(.*)$ /spain/$1 [L]
    

    这一切都很好,但是: 如果用户访问doamin1.com/spain,它们当然会显示该文件夹中的所有文件...

    所以,我尝试在domain1.com/spain上添加重定向...但这不起作用...我已经尝试了一切。包括尝试重定向根.htaccess和西班牙/ .htaccess。都没有工作。

    我正在尝试以下(不起作用)

    # Domain1.com/spain
    RewriteCond %{HTTP_HOST} ^domain1\.com/spain/ [NC]
    RewriteRule (.*)$ http://www.domain1.com/? [L]
    

    我尝试了以上的变化,但似乎都没有(根本没有)

    然而,RedirectMatch确实有效(下图),但也打破了上面的子域(在第一个例子中)。

    RedirectMatch ^/spain/$  /
    

    如果我尝试匹配更多并将RedirectMatch添加为(下方),则不会触发匹配......

    RedirectMatch ^www\.domain1\.com/spain/$  /
    

    我知道我需要做的事情是可能的(我想和假设),但是我在这里碰壁... 请指教,当然谢谢你!!!

1 个答案:

答案 0 :(得分:1)

这是不正确的:

# Domain1.com/spain
RewriteCond %{HTTP_HOST} ^domain1\.com/spain/ [NC]
RewriteRule (.*)$ http://www.domain1.com/? [L]

因为最后一部分(/ spain)永远不是HTTP_HOST的一部分所以它永远不会匹配:)

你想做的是这样的事情

# Domain1.com/spain
RewriteCond %{HTTP_HOST} ^domain1\.com [NC]
RewriteRule ^spain(.*)$ http://www.domain1.com/? [R=302,NC,L]

换句话说,在RewriteRule中移动URL的/ spain部分,它实际上是匹配的,并保持域名在上面的RewriteCond中匹配。