.htaccess - 子域的DocumentRoot

时间:2015-05-21 14:49:12

标签: php regex apache .htaccess mod-rewrite

我有以下htaccess文件。

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.domain_name\.com$ [NC]
RewriteRule (.*) http://domain_name.com/ [R=301,L]

RewriteCond %{HTTP_HOST} !^domain_name\.com$
RewriteCond %{REQUEST_URI} !^/retailers/
RewriteRule (.*) /retailers/$1 [L]

当我进入

  1. www.domain_name.com --Works Fine
  2. domain_name.com - 工作正常
  3. sub.domain_name.com --Works Fine [sub表示任何有效的子域名]
  4. 问题是 当我输入sub.domain.com/admin [admin是/ www / retailers / admin中的文件夹]时,它会将url更改为sub.domain_name.com/retailers/admin。它应该如何在地址栏中显示sub.domain_name.com/admin。

    我不知道如何实现这个目标

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为admin是目录而mod_dir正在强制使用尾部斜杠。你可以像这样使用.htaccess:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(domain_name\.com)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# force a trailing slash for directories
RewriteCond %{HTTP_HOST} !^domain_name\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/retailers/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]

RewriteCond %{HTTP_HOST} !^domain_name\.com$ [NC]
RewriteRule ^((?!retailers/).*)$ retailers/$1 [L,NC]