我实现了重定向以匹配以下规则:
-
所有以.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
-
所有以文件夹重定向到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
-
我的问题是,如果请求最终包含*.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