看不见mod_rewrite并不总是看不见的!?( "www"和"without subdomain" )



我的站点位于使用cPanel 11的主机上。

不幸的是,它将"www.emotiv.net"one_answers"e-motiv.net"重定向到public_html。我想要呼吸。public_html/www和public_html/,这对最终用户来说是不可见的。

我认为最好的方法是通过mod_rewrite,所以我做了以下操作。

文件空间如下(来自public_html/):

  • /.htaccess
  • /index.php
  • /www/index.html
  • /www/test/index.html

我想要这个(第二部分看不见!):

  1. e-motiv.net->/index.php
  2. www.emotiv.net->/www/index.php
  3. www.emotiv.net/test->/www/test/index.php

我以为这样就可以了:

RewriteCond %{HTTP_HOST} ^www.e-motiv.net$
RewriteCond %{REQUEST_URI} !/www
RewriteRule ^(.*)$ /www/$1  [NC,L]

1和2有效,但尽管3提供了正确的文件,但它更改了地址!?(所以不是看不见的)因此,在地址栏中,您可以获得:www.emotiv.net/test->www.emotiV.net/www/test/嗯??

如果mod_rewrite不是最佳解决方案,请务必告知!

这是因为mod_dir。moddir将尾部斜杠添加到映射到目录的url中。mod_dir不知道这些使用mod_rewrite创建的"虚拟url"。

因此,要么使用禁用此行为

DirectorySlash Off

但是,这将导致对www.example.com/文件夹的请求导致找不到404。不过,你可以用一些重写器来解决这个问题。因此,完整的解决方案应该是:

DirectorySlash Off
#www dir only
RewriteCond %{DOCUMENT_ROOT}/$0 -d
RewriteRule ^www/(.+[^/])$ /$1/ [R,L]
#other dirs
RewriteCond %{DOCUMENT_ROOT}/$0 -d
RewriteRule ^(.+[^/])$ /$1/ [R,L]

最新更新