【问题标题】:.htaccess - DocumentRoot for subdomain.htaccess - 子域的 DocumentRoot
【发布时间】:2015-08-03 07:50:15
【问题描述】:

我有以下 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 --Works Fine [sub 表示任何有效的子域名]

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

我不知道我怎样才能做到这一点

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    这是因为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]
    

    【讨论】:

    • 它不工作。现在子域部分发送内部服务器错误 sub.domain.com 之前工作正常。
    • 您在浏览器中输入了什么网址?当你得到 500 时,它是否添加了一个斜杠?
    • sub.domain.com [不工作] sub.domain.com/ [不工作]
    • sub.domain_name.com/admin 也不起作用,sub.domain_name.com/admin/ 也不起作用,
    • 是的,它现在在你版本之后工作。谢谢阿努巴瓦
    猜你喜欢
    • 2014-03-06
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多