希望有人可以提供帮助。抱歉没有充分了解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解决的建议,我们将非常欢迎。
答案 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>