如何使用.htaccess进行多次重写?

时间:2011-03-14 02:29:44

标签: .htaccess mod-rewrite

我正在尝试使用Drupal构建一个多语言网站。

我喜欢以下网址格式

http://domain/[language]/[node id]

所以我将以下规则添加到.htaccess用于测试目的

RewriteRule ^jpn/[0-9]$ jpn.html

问题是规则被以下规则覆盖

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

我如何有多个重写规则?

2 个答案:

答案 0 :(得分:10)

您的第二个RewriteRule设置了L Flag,这意味着如果规则匹配,则不会处理其他规则。

如果您希望第一条规则也停止任何进一步处理,请同时添加L标志。

RewriteRule ^jpn/[0-9]$ jpn.html [L]

还要确保你的第二个规则列在最后,因为它匹配所有内容(。*),因此,Apache将永远不会看到任何其他规则。

已编辑:L标记网址

答案 1 :(得分:0)

我不确定这个[L]在每种情况下是否真的有效,以避免相互覆盖。我不是这方面的专家,但我花了一天的时间才弄清楚你只需要将一个Atome添加到一个之前有效的RewriteRule而不会覆盖,并且它会从第一个开始被覆盖。我很难相信2个不同的规则,在1个htaccess中可以正常工作2个不同的文件。

两者都做得很好

RewriteRule ([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ display.php?$1&category=$2 [L]
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$  news.php?$1 [L]

显示终端
消息

链接2显示link1的结果......,告诉我原因?

RewriteRule ([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ display.php?$1&category=$2 [L]
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ news.php?$1&obj=$2&search=$3 [L]

显示终端
消息