我正在尝试使用Drupal构建一个多语言网站。
我喜欢以下网址格式
http://domain/[language]/[node id]
所以我将以下规则添加到.htaccess用于测试目的
RewriteRule ^jpn/[0-9]$ jpn.html
问题是规则被以下规则覆盖
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
我如何有多个重写规则?
答案 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]
显示终端
消息