Php htaccess重写规则不适用于主页

Php htaccess重写规则不适用于主页,php,.htaccess,Php,.htaccess,我有一个PHP网站。我想将PHP页面名称转换为SEO友好的页面名称。 因此,首先我想转换主页,我想删除提及“索引”。作为一个多语言网站,主页有英文版和法文版 我想: www.abc.com/index.php?lang=fr 成为 www.abc.com/fr/ www.abc.com/fr/links/ 但是,在此之后,我希望其他页面保留其名称,例如: 我想: 成为 www.abc.com/fr/ www.abc.com/fr/links/ 我还希望url不带尾随斜杠。 因此: 应给

我有一个PHP网站。我想将PHP页面名称转换为SEO友好的页面名称。 因此,首先我想转换主页,我想删除提及“索引”。作为一个多语言网站,主页有英文版和法文版

我想:

www.abc.com/index.php?lang=fr
成为

www.abc.com/fr/
www.abc.com/fr/links/
但是,在此之后,我希望其他页面保留其名称,例如: 我想:

成为

www.abc.com/fr/
www.abc.com/fr/links/
我还希望url不带尾随斜杠。 因此:

应给出与此相同的页面:

www.abc.com/fr/links/
www.abc.com/fr/
这是:

www.abc.com/fr
应给出与此相同的页面:

www.abc.com/fr/links/
www.abc.com/fr/
到目前为止,我的htaccess文件的内容如下。 它使我能够正确地更改链接页面,但是,我不知道如何按照上面描述的方式创建索引页面(另外,下面的代码可能非常糟糕,因为我只是htaccess的初学者,所以不要保留批评,到目前为止,我主要是靠猜测来推进…)


我会显式地匹配允许的语言,以便对匹配的URL有更多的控制

如果您允许使用“fr”和“en”,则它应与以下内容一起使用:

RewriteEngine On

# Rewrite /fr/links and /fr/links/ to links.php?lang=fr
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^(en|fr)/(.+)(/?)$ $2.php?lang=$1 [L]

# Rewrite /fr and /fr/ to index.php?lang=fr
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(en|fr)(/?)$ index.php?lang=$1 [L]
虽然这应该是可行的,但我宁愿在实际实现中走另一条路。我会将所有请求重定向到一个index.php文件,并在那里进行路由匹配,从而保持.htaccess干净简单:

RewriteEngine On

# Rewrite everything not existing to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule .* index.php [L]

在index.php中解析语言和页面,并适当地进行包含。

RewriteRule^(.*)$index.php?lang=$1[L,QSA]
类似于我使用了您目前建议的第一个解决方案。但是,我承认我不明白它是如何工作的,因为www.abc.com/en或www.abc.com/en/会生成索引页,这很公平,但在您的重写规则中,是什么使www.abc.com能够显示索引页?这不包括在内,我在问题中没有看到它。但现在我重新阅读并假设您也希望对所有旧URL进行重定向?如果有人进入www.abc.com,应该选择哪种语言?