php - .htaccess - 子域的 DocumentRoot

标签 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 -- 工作正常
  2. domain_name.com -- 工作正常
  3. sub.domain_name.com -- 工作正常 [sub 表示任何有效的子域名]

问题是 当我输入 sub.domain.com/admin [admin 是/www/retailers/admin 中的文件夹] 时,它将 url 更改为 sub.domain_name.com/retailers/admin。它应该如何在地址栏中显示 sub.domain_name.com/admin。

我不知道如何才能实现这一点

最佳答案

发生这种情况是因为 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]

关于php - .htaccess - 子域的 DocumentRoot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30377217/

相关文章:

php - MySQL 之间的日期范围

javascript - Ajax双重形式,第一种形式带有选择,然后是经典形式

php - XDebug 还是 Zend 调试器?

ios - 正则表达式捕获组 swift

php - 使用Varnish缓存的空POST请求

php - 如何更改数据库连接的默认字符集?

javascript - 如何使用正则表达式或任何其他解决方案从复杂字符串中获取所有子字符串?

html - 重构现有的 HTML 文件

apache - 如何在 httpd.conf 中使用一个 IP 地址在 CentOS Apache 上设置多个 SSL 通配符证书

java - 是否有任何通用、简单的java逻辑库可以使代码更具可读性?