htaccess将非www重定向到与CMS冲突的www

时间:2012-09-17 22:36:52

标签: .htaccess mod-rewrite redirect

希望有人可以提供帮助。抱歉没有充分了解htaccess。我试图搜索并花了几个小时的各种选项,但没有成功。

我正在使用基本网址为domain.com/index.php/page-name

的CMS

有一个管理员设置会丢失index.php并且只有domain.com/page-name,这会在下面创建htaccess条目:

<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv gp_rewrite gJjsF6q
</IfModule>
RewriteEngine On
RewriteBase "/"
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
<IfModule mod_cache.c>
RewriteRule /?(.*) "/index.php/$1" [L]
</IfModule>
<IfModule !mod_cache.c>
RewriteRule . "/index.php" [L]
</IfModule>
</IfModule>

为了处理核心规范化,一直试图将任何非www URL请求重定向到www,但到目前为止都失败了。几乎所有东西都会产生某种类型的服务器错误,500,或者,文档已移到此处 - 另外,在尝试使用ErrorDocument处理请求时遇到403 Forbidden错误。

通过在最后(如下所示)处理www / non www重写至少域功能,但重定向仅适用于根。然后每隔一个页面忽略/index.php/重写并再次返回格式为domain.com/index.php/page-name的页面。

<IfModule mod_rewrite.c>
<IfModule mod_env.c>
SetEnv gp_rewrite gJjsF6q
</IfModule>
RewriteEngine On
RewriteBase "/"
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
<IfModule mod_cache.c>
RewriteRule /?(.*) "/index.php/$1" [L]
</IfModule>
<IfModule !mod_cache.c>
RewriteRule . "/index.php" [L]
</IfModule>
<Ifmodule mod_rewrite.c>
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
</Ifmodule>
</IfModule>

基本上比没有重定向更糟糕。如果有人有关于如何维护核心CMS需求以及www /非www解决的建议,我们将非常欢迎。

1 个答案:

答案 0 :(得分:0)

您需要将重定向规则置于以上其他规则并添加L标记:

<IfModule mod_rewrite.c>
    RewriteEngine On

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

    <IfModule mod_env.c>
        SetEnv gp_rewrite gJjsF6q
    </IfModule>

    RewriteBase "/"
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    <IfModule mod_cache.c>
        RewriteRule /?(.*) "/index.php/$1" [L]
    </IfModule>
    <IfModule !mod_cache.c>
        RewriteRule . "/index.php" [L]
    </IfModule>
</IfModule>