mod_rewrite将不同的URI绑定到一个位置

时间:2010-10-22 14:45:58

标签: mod-rewrite redirect url-rewriting

我正在努力解决可能非常简单的mod_rewrite taks。

这是我的目录结构:

  • 根\
    • 翻译\
      • en \ (包含各种带文件的子文件夹,深层次为2级)
      • fr \ (包含各种带文件的子文件夹,深层次为2级)

我想要做的是将各种动态创建的URL指向这些特定位置,而不更改地址栏中的URL。

例如:

mydomain.com/one/ 
mydomain.com/two/ 
mydomain.com/three/

- >所有人都会阅读 /root/translations/en/index.php

中的内容
mydomain.com/one/sub1/sub2/ 
mydomain.com/two/sub1/sub2/ 
mydomain.com/three/sub1/sub2/

- >会阅读 /root/translations/en/sub1/sub2/index.php

中的内容
mydomain.com/onefr/
mydomain.com/twofr/
mydomain.com/threefr/

- >所有人都会阅读 /root/translations/fr/index.php

中的内容
mydomain.com/onefr/sub1/sub2/
mydomain.com/twofr/sub1/sub2/
mydomain.com/threefr/sub1/sub2/

- >会阅读 /root/translations/fr/sub1/sub2/index.php

中的内容

我尝试过类似的事情:

RewriteCond %{REQUEST_URI} !\.css$ [NC]
RewriteRule ^/(one|two|three)/$ /_translations/en/ [L]

RewriteCond %{REQUEST_URI} !\.css$ [NC]
RewriteRule ^/(onefr|twofr|threefr)/$ /_translations/fr/ [L]

虽然它适用于默认重定向(例如mydomain.com/one/),但是当我想要更深入时,它会抛出404.

任何线索?

1 个答案:

答案 0 :(得分:0)

请尝试以下规则:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^/(one|two|three)/(.*) /_translations/en/$2 [L]

RewriteRule ^/(one|two|three)fr/(.*) /_translations/fr/$2 [L]

第一条规则将停止任何可以映射到现有文件的请求,以便通过以下任何规则重写。另外两个规则适用于您描述的两种情况。