htaccess重写规则不适用于主页

时间:2016-08-26 08:08:29

标签: php .htaccess

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

我想:

<h4>Center of text part</h4>
<div>
  <img src="http://beerhold.it/97/50">
  <h5>Hello</h5>
</div>
<hr>
<h4>Center of vieport</h4>
<div class="div">
  <img class="img" src="http://beerhold.it/97/50">
  <h5>Hello</h5>
</div>

成为

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

然而,在那之后,我希望其他页面保留其名称,例如: 我想要:

www.abc.com/fr/

成为

www.abc.com/links.php?lang=fr

我也希望网址在没有尾部斜杠的情况下工作。 所以这个:

www.abc.com/fr/links/

应该提供与此相同的页面:

www.abc.com/fr/links

和此:

www.abc.com/fr/links/

应该提供与此相同的页面:

www.abc.com/fr

到目前为止,我的htaccess文件的内容如下。 它使我能够正确地更改链接页面,但是,我无法弄清楚如何以我上面描述的方式执行索引页面(此外,下面的代码可能非常糟糕,因为我只是一个启动器htaccess所以不要拖延批评,我主要是通过猜测推进到目前为止......)

www.abc.com/fr/

1 个答案:

答案 0 :(得分:0)

我会明确地匹配允许的语言,以便更好地控制匹配的URL。

如果你有&#34; fr&#34;和&#34; en&#34;允许,它应该使用以下内容:

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中解析语言和页面并适当地进行包含。