Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用mod_rewrite链接SEO友好的多语言URL_Php_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 如何使用mod_rewrite链接SEO友好的多语言URL

Php 如何使用mod_rewrite链接SEO友好的多语言URL,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,你好。我正在尝试使用mod_rewrite将类似“sitename.com/lang code/pagename”的URL映射到pagename.php?lang=lang代码,因此我制定了以下重写规则: RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} lang RewriteRule ^([a-z]+)/(.+)$ $2.php?lang=$1 [NC,L] ... 问题是,我在尝试更改网站语言时出错。我没有使用框架,因此

你好。我正在尝试使用mod_rewrite将类似“sitename.com/lang code/pagename”的URL映射到pagename.php?lang=lang代码,因此我制定了以下重写规则:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} lang
RewriteRule ^([a-z]+)/(.+)$ $2.php?lang=$1 [NC,L]
...
问题是,我在尝试更改网站语言时出错。我没有使用框架,因此我的项目的文件结构有一个主文件夹,其中有视图(索引、关于我们、联系人等)和一组用于Db、css、js等的子文件夹。我使用本文开发了多语言网站:


在测试解决方案时,我发现如果我创建了一个名为“lang code”的文件夹,我就可以“解决”错误,但如果重写规则可以告诉Apache不要将“sitename.com/lang code/pagename”中的“lang code”作为文件夹读取,我真正想要的是什么。有人能帮我吗?提前执行Tyvm。

您的规则很可能无法执行。您正在检查查询字符串中是否存在
lang
,然后才读取路径的第一部分并将其用作语言。那没有道理

您可以通过检查查询字符串中是否存在
lang
而不是,并且只匹配您的站点实际支持的语言来改进这一点。例如,
css
js
不是语言,即使您可能有这些文件夹来放置样式表和javascript文件。此外,如果url包含查询字符串,则当前会覆盖该字符串。您可能希望使用
[QSA]
标志将新查询字符串附加到当前查询字符串

您的新规则如下所示:

RewriteCond %{QUERY_STRING} !lang=
RewriteRule ^(en|fr|de)/(.+)$ $2.php?lang=$1 [NC,L,QSA]