RewriteRule与目录同名

时间:2011-07-19 12:01:37

标签: .htaccess mod-rewrite rewrite

对于我的网站,我有一个名为/test/的目录。我想将www.example.com/nl/testwww.example.com/nl/test/重写为某个页面(test.php)。

某些全球条件(适用于所有规则)

RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R]
RewriteBase /

RewriteRule ^(nl|en)$ $1/ [NC,R]

RewriteCond $1 !^(en|nl)$
RewriteRule ^([a-z]{2})/(.*)$ en/$2 [L,R=302]

RewriteRule ^(nl|en)/(.*)$ $2?language=$1&%{QUERY_STRING} [L]

RewriteRule ^sale$ sale.php
RewriteRule ^valentine$ valentine.php

重写+文件夹的一些条件

RewriteRule ^test/$ test.php

www.example.com/nl/test/的重定向是正确的。语言参数也被正确重写。

对于第二个重定向(没有尾部斜杠的版本),我无法正常工作。

RewriteRule ^test$ test.php

现在我的网址被重写为www.example.com/test/?language=nl

有人可以给我一个提示或提示来解决这个问题吗?我无法更改目录的名称,因为有几个外部URL链接到此目录。

1 个答案:

答案 0 :(得分:2)

此规则将完成整个工作(而不是您在那里的4行):它会将/nl/test/nl/test/重写为/test.php?language=nl

RewriteRule ^(en|nl)/test/?$ /test.php?language=$1 [NC,QSA,L]

注意:

[QSA]标志将保留任何现有的查询字符串(因此,不需要&%{QUERY_STRING})。


完整.htaccess:

Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine On
RewriteBase /

RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R=301,L]

RewriteCond $1 !^(en|nl)$
RewriteRule ^([a-z]{2})/(.*)$ /en/$2 [R=302,L]

RewriteRule ^(nl|en)/(.*)$ /$2?language=$1 [NC,QSA,L]

RewriteRule ^sale/?$ sale.php [QSA,L]
RewriteRule ^valentine/?$ valentine.php [QSA,L]
RewriteRule ^test/?$ test.php [QSA,L]

注意:

您不需要RewriteRule ^(nl|en)$ $1/ [NC,R],因为您已经拥有RewriteRule ^(nl|en)$ http://www.example.com/$1/ [NC,R=301,L]。它做同样的工作。