如何url重写/index_lang.php到/lang/index.php?

时间:2017-02-05 16:19:16

标签: php .htaccess url-rewriting

我的问题非常简单,但我是.htaccess的新手,并且没有看到我能理解和应用的互联网示例......

我有两个索引:index.phpindex_fr.php

我希望index_fr.phpfr/index.php,如果可能,请将使用法语的浏览器重定向到fr/index.php,将所有其他浏览器重定向到index.php

另外,我想知道当我尝试从img/picture.jpg根访问fr/时会发生什么。它是否会调查fr/img/picture.jpg(在这种情况下图像会被破坏)?

谢谢你们;)

1 个答案:

答案 0 :(得分:0)

你的问题有点模糊,但我认为这就是你要找的东西:

RewriteEngine on

RewriteCond %{HTTP:Accept-Language} (fr) [NC]
RewriteCond %{REQUEST_URI} !^/[a-z]{2}/ [NC]
RewriteCond %{REQUEST_URI} !^/fr/
RewriteRule ^(.+)$ /fr/$1 [L,R=301]

RewriteRule ^/?fr/index\.php$ /index_fr.php [L]

这将在内部重写对/fr/index.php/index_fr.php的传入请求,而不会触及任何路径组件与前导两个字母模式匹配的请求(例如{{1}前面有三个字母)。

为了实现这一点,必须启用http服务器重写模块,还必须启用动态配置文件(/img/...)的解释,并且保存该规则的文件必须位于{{1那个http主机。

一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。