.htaccess - 不会将www添加到只有一个子目录

时间:2013-09-24 11:44:04

标签: apache .htaccess redirect mod-rewrite url-rewriting

我在根目录中有一个.htaccess,其内容为:

<IfModule mod_rewrite.c>
    RewriteEngine on
    #RewriteCond %{HTTP_HOST} ^domain.com
    #RewriteRule (.*) http://www.domain.com$1 [R=301,L]
</IfModule>

如果我转到http://domain.com/subdir,则会重写为http://www.domain.com/subdir

但是我的一个名为“crm”的子目录存在问题 - 如果我转到http://domain.com/crm,我会将我重定向到http://www.domain.com而不是http://www.domain.com/crm

在这个“crm”子目录中,我有另一个.htaccess文件,它将.php扩展名重写为.html。这是代码:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^([^/]*)/([^/]*)\.html$ ?name=$1&id=$2 [L]
    RewriteRule ^(.*).html$ index.php?name=$1 [QSA]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^([^/]*)/([^/]*)\.html$ ?name=$1&id=$2 [L]
</IfModule>

有人可以告诉我如何才能完成这项工作?因此,当我转到http://domain.com/crm时,它会将我重定向到http://www.domain.com/crm

编辑:

Root .htaccess还可以,我正在更改内容并忘记删除stackoverflow的注释。

crm / .htaccess现在是:

RewriteEngine on 
RewriteOptions Inherit 

RewriteRule ^([^/]*)/([^/]*)\.html$ ?name=$1&id=$2 [L] 
RewriteRule ^(.*).html$ index.php?name=$1 [QSA] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^ - [L] 
RewriteRule ^([^/]*)/([^/]*)\.html$ ?name=$1&id=$2 [L] 

但它仍然没有将此子目录重定向到www.domain.com/crm但仅限于www.domain.com :(

1 个答案:

答案 0 :(得分:1)

首先将根.htaccess更改为:(目前似乎已被评论)

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

然后在crm / .htacess中,在RewriteEngine on下面添加这一行:

RewriteOptions Inherit

更新:您的crm/.htaccess有问题。用以下代码替换该内容:

RewriteEngine on 
RewriteOptions Inherit 

RewriteRule ^([^/]*)/([^/]*)\.html$ ?name=$1&id=$2 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^.]+)\.html$ index.php?name=$1 [QSA,L] 

一旦此代码出现重定向将按预期发生。