有一个域/子域example.com
/ www.example.com
(显然它们都指向/public_html
)并且放置在此目录中的网站运行良好。我创建了子网区/public_html/wwwnew
和子网区wwwnew.example.com
。我希望此子域指向此子文件夹,但我不想更改用户键入的URL(wwwnew.example.com
)。当然我需要使用.htaccess
。
我当前的.htaccess
档案:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(wwwnew.)?example.com$
RewriteRule ^(/)?$ wwwnew [L]
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
目前,当我输入wwwnew.example.com
网址更改为wwwnew.example.com/wwwnew
时。我希望这个/wwwnew
消失......
任何帮助?
答案 0 :(得分:0)
RewriteRule ^(/)?$ wwwnew [L]
如果wwwnew
是一个物理子目录(您说它是),那么您应该在RewriteRule
susbtition 的末尾添加一个尾部斜杠(最好是索引)文件以及)。如果你不这样做,那么mod_dir将为你附加斜杠(为了“修复”URL)并这样做会触发外部301重定向(你似乎看到了)。虽然这会重定向到wwwnew.example.com/wwwnew/
(带有斜杠),但不是wwwnew.example.com/wwwnew
,正如您在问题中所述。
RewriteCond %{HTTP_HOST} ^(wwwnew.)?example.com$
但是,您的条件会重写对apex域和子域的请求。在您的描述中,您只描述了从子域重写,而不是顶点域(在其中有另一个站点)。
所以,请尝试以下方法:
RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule ^$ wwwnew/ [L]
(/)?
中不需要.htaccess
。虽然,最好,您应该直接重写您要处理此请求的文档(即索引文档)(否则mod_dir必须为您执行此操作)。例如:
RewriteRule ^$ wwwnew/index.php [L]
您需要清除浏览器缓存,因为浏览器会缓存错误的重定向到/wwwnew
。
<强>更新强>
但是,上面只重写了对裸子域的请求,没有任何URL路径(如问题中所述)。为了将此子域的任何请求(例如wwwnew.example.com/<something>
)重写到子目录,您需要执行以下操作:
RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule !^wwwnew/ wwwnew/index.php [L]
这确保我们不会得到重写循环。