【问题标题】:htaccess rewriting rule does not work for homepagehtaccess 重写规则不适用于主页
【发布时间】:2016-08-26 08:08:29
【问题描述】:

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

我想要:

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

成为

www.abc.com/fr/

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

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

成为

www.abc.com/fr/links/

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

www.abc.com/fr/links

应该给出与此相同的页面:

www.abc.com/fr/links/

还有这个:

www.abc.com/fr

应该给出与此相同的页面:

www.abc.com/fr/

到目前为止,我的 htaccess 文件的内容如下。 它使我能够正确更改链接页面,但是,我无法弄清楚如何按照我上面描述的方式创建索引页面(另外,下面的代码可能非常糟糕,因为我只是一个初学者htaccess 所以不要忍住批评,到目前为止我主要是靠猜测来推进......)

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)/index(/*)$ index.php?lang=$1 [L]
RewriteRule ^(.+)/links(/*)$ links.php?lang=$1 [L]

【问题讨论】:

  • RewriteRule ^(.*)$ index.php?lang=$1 [L,QSA] 类似

标签: php .htaccess


【解决方案1】:

我会明确匹配允许的语言,以便更好地控制匹配的 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 中解析语言和页面并适当地包含。

【讨论】:

  • 我现在使用了您建议的第一个解决方案。但是,我承认我不明白它是如何工作的,因为 www.abc.com/en 或 www.abc.com/en/ 产生的索引页面很好,很公平,但是您的重写规则中的内容启用了 www.abc。 com 来显示索引页?
  • 不包括在内,我没有在问题中看到它。但是现在我重新阅读并假设您还希望对所有旧 URL 进行重定向?如果有人进入 www.abc.com,应该选择哪种语言?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2010-12-10
  • 2014-07-24
  • 2023-03-17
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多