【问题标题】:Apache redirect domain to folder is not specified未指定 Apache 将域重定向到文件夹
【发布时间】:2013-03-17 05:59:31
【问题描述】:

如果 URL 请求中未指定子文件夹,我需要将我的域重定向到子文件夹。

例如。

a) 如果请求来自“domian.com”或“www.domain.com”,我想将其重定向到“www.domain.com/page”。

b) 但是,如果请求来自“domain.com/page2”或“www.domain.com/page2”,我不希望将请求重定向到“www.domain.com/page”。

我一直在虚拟主机中尝试一些排列,但没有运气。以下是我的代码:

<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com

<Directory />
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      Options +Indexes
      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
      RewriteCond %{REQUEST_URI} !^/$1
      RewriteRule ^(.*)$ /Page [L]
    </IfModule>
</Directory>

ProxyPreserveHost On
ProxyPass         /  http://www.domain.com:8080/
ProxyPassReverse  /  http://www.domain.com:8080/
</VirtualHost>

任何指针都会有所帮助。

【问题讨论】:

    标签: mod-rewrite url-rewriting apache2 httpd.conf


    【解决方案1】:

    你可以试试这个:

      RewriteEngine On
      RewriteBase /
      RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC]
      RewriteCond %{REQUEST_URI} ^$   [NC]
      RewriteRule .* /Page [L]
    

    【讨论】:

    • 为什么,当有 URI 路径时使用该规则?
    • 我需要的是,如果我点击 domain.com 或 www.domain.com,它应该被重定向到 www.domain.com/Page 并且如果我点击 www.domain.com /Page2,它不应该被重定向。
    • 这就是规则集应该做的。确保在进行任何测试之前清除浏览器的缓存。并将 [L] 暂时替换为 [R,L] 以便您可以看到重定向的 URL。
    • 还是不行。我也清除了缓存。以下是我正在使用的规则:codeRewriteBase / RewriteCond %{HTTP_HOST} (www\.)?(domain2\.com|domain3\.com)$ [NC] RewriteRule ^(.*)$ domain.com/$1 [ R=301,L] RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] RewriteCond %{REQUEST_URI} !. [NC] 重写规则 .* /Home [L]
    • 第一条规则有错误:RewriteRule ^(.*)$ domain.com/$1 应该是RewriteRule ^(.*)$ http://domain.com/$1 它是在替换 URL-path 中附加 domain.com,而不是重定向到 http://domain.com
    【解决方案2】:

    RewriteCond%{REQUEST_URI} !^/$1 排除每个请求,因此从不使用RewriteRule

    如果您只想重写根目录,请改用特定的regular expression ^/$。您还必须将规则包装在适当的&lt;Directory&gt; 中,因为包含的所有内容都适用于文件系统目录,而不是 URL 路径

    <Directory /path/to/documentroot>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$
        RewriteRule ^$ /Page [L]
    </Directory>
    

    【讨论】:

    • 嗨,Olaf,上面的规则将重定向到 /Page,不管 URL 中是否提供了子文件夹。我需要的是选择性重写。另外,我尝试了上述规则,它也没有重定向到 /Page。
    • @AkhileshAggarwal 它只会重写根目录。如果您指定任何 URL 路径,例如www.domain.com/abc,它将不会重写为/Page,而是提供/abc
    • 我测试了规则,它没有重定向到根目录:(
    • @AkhileshAggarwal 我只在 .htaccess 中测试过这个,而不是在虚拟主机/目录中。请查看更新的答案。
    • @AkhileshAggarwal 我在 .htaccess 中测试了第一个版本,在我的虚拟主机测试环境中测试了第二个版本。对于我的虚拟主机,它是&lt;Directory /var/www/vhosts/example.com&gt;,您的DocumentRoot 将在其他地方。并且不要忘记重新加载配置或重新启动 Apache。
    猜你喜欢
    • 2012-12-09
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多