htaccess重定向url,子域作为参数,仅适用于php文件和目录



我实现了重定向以匹配以下规则:

  1. 所有以.php结尾的内容都被重定向到.php?lang=en-

    • http://en.d.com/index.php=>http://d.com/index.php?lang=en
    • http://en.d.com/zzz.php=>http://d.com/zzz.php?lang=en
    • http://en.d.com/folder/index.php=>http://d.com/folder/index.php?lang=en
  2. 所有以文件夹重定向到index.php结束的内容?lang=en-

    • http://en.d.com=>http://d.com/index.php?lang=en
    • http://en.d.com/folder=>http://d.com/folder/index.php?lang=en
  3. 我的问题是,如果请求最终包含*.php以外的任何文件,我如何在不重定向的情况下按原样处理请求:

    • http://en.d.com/file.xml=>http://en.d.com/file.xml
    • http://en.d.com/folder/file.xml=>http://en.d.com/folder/file.xml
RewriteCond %{REQUEST_URI}    !(.*?).php   [nc]
RewriteCond %{HTTP_HOST}         ^([^.]+).([^.]+).([^.]+)$
RewriteRule ^(.*)$ http://d.com/$1/index.php?lang=%1 [R=301,L,QSA]

RewriteCond %{REQUEST_URI}      !^/.php   [nc]
RewriteCond %{HTTP_HOST}         ^([^.]+).([^.]+).([^.]+)$
RewriteRule ^(.*)$ http://d.com/$1?lang=%1 [R=301,L,QSA]
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{HTTP_HOST}         ^([^.]+).([^.]+).([^.]+)$
RewriteRule ^(.*)$ http://d.com/$1?lang=%1 [R=301,L,QSA]

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST}         ^([^.]+).([^.]+).([^.]+)$
RewriteRule ^(.*)$ http://d.com/$1index.php?lang=%1 [R=301,L,QSA]

此外,如果能获得有关我的规则的反馈或改进建议,那将是一件好事。

RewriteCond %{REQUEST_URI}    !^/.php

这个条件永远不会满足,因为它检查uri值是否以/.php,开头

将其更改为:

RewriteCond %{REQUEST_URI}    !^/.*.php

最新更新