将force-www与干净的网址结合起来

时间:2010-06-30 19:52:41

标签: mod-rewrite

我在我的htacces中进行了这个mod-rewrite,它可以启用一些干净的URL;

<IfModule mod_rewrite.c>

RewriteEngine on
RewriteBase /

### LANGUAGE REDIRECT RULES start
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(en|nl)-?()?\/(.*\/?)$ index.php?language=$1&region=$2&symphony-page=$3&%{QUERY_STRING} [L]
### LANGUAGE REDIRECT RULES end

### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ ./index.php?symphony-page=$1&%{QUERY_STRING}  [L]

</IfModule>

现在我想强制使用www,所以我扩展了代码:

<IfModule mod_rewrite.c>

RewriteEngine on
    RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteBase /

### LANGUAGE REDIRECT RULES start
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(en|nl)-?()?\/(.*\/?)$ index.php?language=$1&region=$2&symphony-page=$3&%{QUERY_STRING} [L]
### LANGUAGE REDIRECT RULES end

### FRONTEND REWRITE - Will ignore files and folders
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\/?)$ ./index.php?symphony-page=$1&%{QUERY_STRING}  [L]

</IfModule>

然而,这导致我的网页都找不到。 仅供参考。语言重定向会在加载时将国家/地区代码参数添加到网址。

如何让这些规则发挥作用?

1 个答案:

答案 0 :(得分:0)

您可能缺少查询字符串:

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

您还可以在其他规则中使用QSA标志,例如:

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

我还添加了B,因为您在查询字符串中使用了反向引用,因此需要对其进行转义。

请参阅documentation