糟糕的htaccess语法,仅适用于单个rewriteRule

时间:2013-10-02 18:12:09

标签: regex apache .htaccess mod-rewrite

我想在某个基础上重写所有链接,寻找其网址片段的价值。 使用.htaccess,我能够重定向一个链接,但是当我尝试将其作为规则时,我会失败。 我想一个错误的语法,这是我的代码。

# here single rewrite, works like a charm.
RewriteRule ^francais/Projects/template/297_tsf/dsource/projects\.xml$ http://www.mysite.com/mobile/fr/index.php/xml/projet/297_tsf/file.xml

# uh oh, trying to write a real rule, doesn't works at all.
RewriteRule ^francais/Projects/template/([a-z0-9]+)/dsource/projects\.xml$ http://www.mysite.com/mobile/fr/index.php/xml/projet/$1/file.xml [NC] [L]

任何想法?

1 个答案:

答案 0 :(得分:0)

这是正确的语法:

RewriteRule ^francais/Projects/template/([a-z0-9]+)/dsource/projects\.xml$ /mobile/fr/index.php/xml/projet/$1/file.xml [NC,L]

你有标志:

[NC] [L]

这是不正确的语法,它应该像我在上面的回答中所示。

参考:Apache mod_rewrite Introduction

PS:我从目标网址中删除了http://www.mysite.com,因为您正在使用静默(内部)重写,并且由于存在包含http://的完整网址,它将成为外部网址重定向。但是,如果您真的想要外部重定向,请使用:

RewriteRule ^francais/Projects/template/(\w+)/dsource/projects\.xml$ /mobile/fr/index.php/xml/projet/$1/file.xml [NC,L,R]