【问题标题】:How to stop re-write rules for existing files located in virtual language folders (.htaccess)如何停止对位于虚拟语言文件夹 (.htaccess) 中的现有文件的重写规则
【发布时间】:2014-11-28 13:49:51
【问题描述】:

在我的 .htaccess 中,所有无法找到的请求 url 都将使用以下代码重写为 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

如何为这些虚拟文件夹中的所有现有文件停止上述重写规则?

【问题讨论】:

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


    【解决方案1】:
    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]
    

    【讨论】:

      【解决方案2】:

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

      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]
      

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 2012-02-24
        • 2016-03-30
        • 1970-01-01
        相关资源
        最近更新 更多