2

我有网站,必须将 site.ru 和 www.site.ru 重写为 www,site.ru/ru_RU。

我无法访问任何 Apache 配置文件。在 htaccess 中:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{HTTP_HOST} ^site.ru$
RewriteRule (.*) http://www.site.ru/ru_RU [QSA]
RewriteCond %{HTTP_HOST} ^www.site.ru$
RewriteRule (.*) http://www.site.ru/ru_RU [QSA]

RewriteCond %{REQUEST_URI} ^/news
RewriteRule (.*) /news [QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
</IfModule>

它在 firefox 或 chrome 中工作,但在 IE 中我得到“此页面无法显示”。在少数电脑上测试过 IE10 和 IE8(不兼容视图)。

如果我在 .htacess 中写一些垃圾,我会在 IE 中收到 500 错误。没有 .htaccess 站点加载正常,但我需要它来重写 url。任何想法如何解决它?

4

2 回答 2

1

你的标志都是错误的。将您的规则修改为:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^ http://www.site.ru/ru_RU [L,R]

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule !ru_RU /ru_RU [NC,L,R]

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

</IfModule>

参考:Apache mod_rewrite 简介

于 2013-11-15T07:40:58.070 回答
0

我现在无法测试它,但这是我的猜测:我认为 http_host 只包含主机部分,而不是 uri。因此,您最终会陷入无限循环,因为 www.site.ru 在您重写后总是会再次匹配。

您将需要另一个规则来检查 uri 是否为空。像这样(未经测试):

RewriteCond %{REQUEST_URI} ^$
RewriteRule (.*) /ru_RU [QSA]

对于 uri 包含斜杠的情况,您可能需要另一个条件。

于 2013-11-15T07:44:56.000 回答