我目前正在将网站从英语翻译成西班牙语。我想使用一个重写规则,可以将当前语言放在url的开头,就在域之后。例如:
当前网址没有重写规则: http://www.example.com/sample_subdirectory/?language=spanish
目标: http://www.example.com/spanish/sample_subdirectory/
在撰写本文时,我将所有的php文件重写为好像是子目录(例如example.com/something.php到example.com/something/),所以没有问题。我的目标是看看是否有办法重写网址,以便显示“/ spanish / something / something_else / etc /”而不是显示语言GET变量。目标是不必为每个URL仅针对西班牙语翻译执行单独的重写规则,而是将/ spanish /子目录附加到url的开头。我试图找出如何使用元字符,但我不认为我做得对。这是我试过的(我很确定这样做错了:/)
RewriteCond%{QUERY_STRING} ^ id =(西班牙语)$ RewriteRule ^ / spanish /(.*)$ / $ 1?id =%1
我仍然对重写规则有点新意,我只知道基本的东西,我绝对不是网络服务器管理员所以我不知道如何实现我的目标。希望有可能做到这一点。具有讽刺意味的是,我可能已经完成了简单的重写规则,而不是花费一个小时试图做到这一点但是很好:P
答案 0 :(得分:0)
根据您在上面给出的示例,以下内容应该符合您的要求:
RewriteCond %{QUERY_STRING} ^language=spanish$
RewriteRule ^/(.*)$ /spanish/%1?
只有当查询字符串为“language = spanish”时,RewriteCond才会运行RewriteRule。
RewriteRule保存原始URL中的目录,并将其附加到目录“/ spanish /”。的?最后删除查询字符串。
答案 1 :(得分:0)
感谢bobdye的洞察力,我意识到我必须完全删除这个条件并调整RewriteRule看起来像这样:
RewriteRule ^/subdirectory/spanish/(.*)$ /subdirectory/$1?language=spanish
注意:/ subdirectory是我在笔记本电脑上运行的虚拟服务器(localhost)内的文件夹。
正如你所看到的,我不得不将/ spanish /目录放在模式中,并且我将使用的任何子目录作为实际链接的后向引用,然后我只是将GET变量language = spanish附加到链接的结尾。我仍然需要测试以确保这适用于/ spanish /下的任意数量的副标题,但这肯定解决了我的问题。