1

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

我正在使用 CMS,其中基本 URL 的格式为 domain.com/index.php/page-name

有一个管理员设置会丢失 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/non www 提出建议,他们将非常受欢迎。

4

1 回答 1

1

您需要将重定向规则放在其余规则之上并包含一个标志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>
于 2012-09-17T22:41:29.327 回答