Mod rewrite 未指定Apache将域重定向到文件夹

Mod rewrite 未指定Apache将域重定向到文件夹,mod-rewrite,url-rewriting,apache2,httpd.conf,Mod Rewrite,Url Rewriting,Apache2,Httpd.conf,如果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> Ser

如果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>

ServerName域名.com
ServerAlias www.domain.com
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
选项+FollowSymLinks
选项+索引
重新启动发动机
重写基/
重写cond%{HTTP_HOST}^(www\)?domain\.com$
重写cond%{REQUEST_URI}^/$1.
重写规则^(.*)$/页[L]
代理主机
ProxyPass/http://www.domain.com:8080/
ProxyPassReverse/http://www.domain.com:8080/

任何指针都会有帮助。

您可以尝试以下方法:

  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com [NC]
  RewriteCond %{REQUEST_URI} ^$   [NC]
  RewriteRule .* /Page [L]
%{REQUEST\u URI}^/$1
排除每个请求,因此从不使用
重写规则

如果只想重写根目录,请使用特定的
^/$
。您还必须将规则包装到相应的
,因为所包含的所有内容都适用于文件系统目录,而不是URL路径

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

重新启动发动机
重写cond%{HTTP_HOST}^(www\)?domain\.com$
重写规则^$/页[L]

Hi Olaf,无论url中是否提供子文件夹,上述规则都将重定向到/Page。我需要的是选择性的重写。另外,我尝试了上面的规则,它也不会重新指向/Page。@AkhileshAggarwal它只会重写根目录。如果指定任何URL路径,例如
www.domain.com/abc
,它将不会重写为
/Page
,而是提供
/abc
。我测试了该规则,它不会重定向到根目录:(@AkhileshAggarwal我只在.htaccess中测试了这个,而不是在虚拟主机/目录中。请查看更新的答案。@AkhileshAggarwal我在.htaccess中测试了第一个版本,在我的虚拟主机测试环境中测试了第二个版本。对于我的虚拟主机,它是
,您的
文档根
将在其他地方。请不要忘记rget以重新加载配置或重新启动Apache。为什么,当存在URI路径时会使用该规则?我需要的是,如果我点击domain.com或www.domain.com,它应该被重新定向到www.domain.com/Page,如果我点击www.domain.com/Page2,它不应该被重定向。这是规则集应该做的。确保浏览器的缓存是cl在任何测试之前删除。并将[L]临时替换为[R,L],以便您可以看到重定向的URL。仍然不起作用。我还清除了缓存。下面是我使用的规则:
code
RewriteBase/RewriteCond%{HTTP_HOST}(www\)?(domain2\.com | domain3\.com)$[NC]RewriteRule^(.*)[R=301,L]RewriteCond%{HTTP_HOST}^(www\.)?domain\.com$[NC]RewriteCond%{REQUEST_URI}.[NC]RewriteRule.*/Home[L]第一条规则中有一个错误:
RewriteRule^(.*)$domain.com/$1
应该是
RewriteRule^(.*)$ http://domain.com/$1
它将
domain.com
附加到替换URL路径,而不是重定向到
http://domain.com