首页  >  问答  >  正文

PHP 和 htaccess 中的英语和西班牙语友好 URL

我有一个英语和西班牙语网站,每种语言都有自己的文件夹,例如:

news.com/en/ for English
news.com/es/ for Spanish

最新新闻列表显示在以下位置:

news.com/en/latest-news.php for English
news.com/es/ultimas-noticias.php for Spanish

当用户点击某篇文章阅读整篇文章时,他们会被链接以从这里阅读整篇文章(使用 MySQL 中存储的 slug),如下所示(例如):

news.com/en/general/news/europe/2022/10/22/this-is-a-nice-title

所有文章都使用以下页面来获取 slugs:

news.com/en/read-article.php for English
news.com/es/leer-noticia.php for Spanish

在这些页面上,脚本查询 MySQL 以搜索 slug 并显示完整的文章。问题是由于某种我不明白的原因我没有得到任何结果。

如果我将文件移动到根目录:

news.com/read-article.php for English
news.com/leer-noticia.php for Spanish

然后它工作正常,但是将这些文件添加到子文件夹中我没有​​得到任何结果。

重要的是,slugs 像这样保存在 MySQL 中:

general/news/europe/2022/10/22/this-is-a-nice-title

因为它们看起来比破折号更好,而且日期是发布日期,所以每篇文章都会发生变化。

这是我为这些子文件夹创建的 .htaccess 代码:

更新:问题仅出现在 htaccess 中,即使我回答了自己的问题,仍然没有完全解决

RewriteEngine On

RewriteRule ^(en)/([a-zA-Z0-9-]+)$ /read-article.php?id= [L]

RewriteRule ^(es)/([a-zA-Z0-9-]+)$ /leer-noticia.php?id= [L]

知道问题出在哪里吗?

P粉969253139P粉969253139430 天前504

全部回复(1)我来回复

  • P粉281089485

    P粉2810894852023-09-09 09:29:40

    对于那些寻求帮助的人,因为他们有同样的问题,而且我确信有很多:

    我可以以一种非常幸运的方式修复它,但肯定不是专业的方式,这可能是错误的方式,但它是有效的。这个网站上有很多类似的问题没有答案,所以似乎一般人对htaccess的了解并不多。

    我找到的解决方案是:

    RewriteEngine on
    RewriteRule ^en/([a-zA-Z0-9-/]+)$ /en/read-article?slug=  [L]
    RewriteRule ^en/([a-zA-Z0-9-/]+)$ /en/leer-noticia?slug=  [L]

    因此,您可以拥有多种语言的网站,每种语言都位于子文件夹中,但即使您只运行一种单一语言的网站并使用子文件夹,那么您肯定需要此帮助,只需运行此 . htaccess ,它会工作(显然用你的文件名编辑)

    现在我们肯定需要阅读更多有关代码中 [L] 的内容,还有许多其他类似的代码:

    我不明白以下命令,如果需要它们,但您寻求帮助肯定可以找到它,或者也许这里的一些人可以与我们分享知识:

    DirectoryIndex home.php  
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    [L]
    Options +FollowSymLinks -MultiViews
    [QSA]

    没有其他人回答这个问题,这与大多数有关 .htaccess 和友好 URL 的问题相同,但这里至少有一些不专业的东西,但无论如何我分享一些小菜鸟知识,因为这是这个社区的主要思想,而不是每个人都是专业人士,但我们都可以分享知识。如果有更好的答案,我一定会将其标记为正确

    回复
    0
  • 取消回复