如何停止重写虚拟语言文件夹中的现有文件的规则(.htaccess)

时间:2014-10-03 13:38:26

标签: apache .htaccess mod-rewrite url-rewriting

在我的.htaccess中,使用以下代码将所有无法找到的请求网址重写为main.php:

RewriteCond $1 ^ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ main.php?document=$1 [L,QSA]

这意味着,如果某人正在键入www.my-site.com/contact_us.php该页面将显示,因为该文件存在且上述重写规则将不会应用。

问题在于使用多语言时,因为我为每种语言使用虚拟文件夹。例如意大利语将是:

www.my-site.com/it/contact_us.php

如何针对位于这些虚拟文件夹中的所有现有文件停止上面的重写规则?

2 个答案:

答案 0 :(得分:0)

RewriteCond $1 ^

RewriteRule ^([a-z]{2})/(.*)$ main.php?lang=$1&document=$2 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

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

答案 1 :(得分:0)

您可以像这样使用您的规则:

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

RewriteCond %{DOCUMENT_ROOT}/$1/$2 !-f
RewriteCond %{DOCUMENT_ROOT}/$1/$2 !-d
RewriteRule ^([a-z]{2})/(.*)$ main.php?lang=$1&document=$2 [L,QSA,NC]

RewriteRule ^(.+)$ main.php?document=$1 [L,QSA]