转换这些请求的最简单方法是什么:
http://www.example.com/en/
http://www.example.com/en/index.php
要:
http://www.example.com/index.php?language_id=en
有各种PHP文件,因此规则也需要映射
http://www.example.com/en/anyfile.php
要:
http://www.example.com/anyfile.php?language_id=en
语言ID可以是任何两个字母的代码(在PHP脚本中检查,以确保它有效)。
据推测,我需要使用.htaccess,并且非常感谢任何有关如何实现上述内容的建议。感谢。
更新
以下对我有用。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([a-z]+)/(css|js|images)/(.+) /$2/$3 [L]
RewriteRule ([a-z]+)/(.+).php /$2.php?language_id=$1 [QSA,L]
RewriteRule ([a-z]+)/$ /index.php?language_id=$1 [QSA,L]
</IfModule>
这也会将对css,js和images文件夹的请求重新路由回根文件夹。如果没有输入文件名,它也可以工作,自动重定向到index.php。
答案 0 :(得分:2)
您可能希望在重写规则中添加QSA
标志,该标志会将查询字符串上的任何附加位附加到重写的请求中,例如
RewriteRule magic here [PT,QSA]
答案 1 :(得分:1)
RewriteRule /([^/]+)/(.*) /$2?language_id=$1
答案 2 :(得分:0)
RewriteRule /en/(.*) /$1?language_id=en
它没有经过测试,但理论上它应该在en之后映射任何东西,因为?language_id = en
您也可以
RewriteRule /([a-zA-Z0-9+])/(.*) /$2?language_id=$1
这也应该映射
到
答案 3 :(得分:0)
我正在使用以下构造来获取友好的URL:
RewriteRule ^([^/]+)[/]{0,1}(.*)$ index.php?q=$2&language=$1 [L,QSA,NC]