目前我的网站只有一种语言,
我实现了友好的网址v .a .htaccess,如:
RewriteRule ^post/(.+)/(.+) post.php?id=$2&friendly=1
所以:
domain.com
是主页,domain.com/the-title/5
是ID为5的帖子的页面。
现在我想将其作为默认语言网址,例如,下一语言将是:
domain.com/es
是主页,domain.com/es/the-title/6
是西班牙语ID为6的帖子的页面。 (但以前的规则也应该有效)
问题是,
我应该如何调整我的(或其他)重写规则以检查网址的第一个2个字符(第一个拆分)并将其添加为参数,例如:&lan=es
如果找不到,则不要添加此参数?
让我们说:
^post/(.+)/(.+) post.php?id=$2&friendly=1
(英文)
^es/post/(.+)/(.+) post.php?id=$2&friendly=1&lan=es
(西班牙语)
但如果可行,
^es/photo/(.+)/(.+) photo.php?id=$2&friendly=1&lan=es
(西班牙语)
有什么建议吗?
答案 0 :(得分:2)
这样的事可能有用。我没有测试它,但您可以使用RewriteCond来检查uri的特定结构,如果匹配,请使用以下规则。如果没有,则继续执行原始规则。
#Does the uri match 2 characters followed by /post/?
RewriteCond %{REQUEST_URI} ^../post/
#then use this rule and stop processing rules
RewriteRule ^(..)/post/(.+)/(.+) post.php?id=$3&friendly=1&lan=$1 [L]
#Else use this rule
RewriteRule ^post/(.+)/(.+) post.php?id=$2&friendly=1&lan=en
编辑:我在第二条规则的末尾添加了一种默认语言。这样,始终存在$_GET['lan']
参数。您可以将其关闭并在php中设置默认值。你的选择,没有区别。
答案 1 :(得分:2)
我只能通过建议回答你,因为我们需要更多的背景......
根据这些建议,您只能对您的所有网站使用以下重写规则:
RewriteRule ^([^\/]+)/([^\.]+)\.([\.]+)$ index.php?lang=$1&route=$2&format=$3 [L,QSA]
在这里我捕捉语言(es,en,en_US,fr ...),路线(post / 5,gotabeer,cats / postit / thumb / 2)和格式(html,json,jpeg ...... )。 (我没有尝试重写规则,但它应该有用)
答案 2 :(得分:1)
以下是我的建议:
RewriteRule ^/?((en|es)/)?post/(.+)/(.+)$ post.php?id=$4&friendly=1&lan=$2
/?
允许字符串开头的可选正斜杠。这使得规则能够在htaccess目录联系人和httpd.conf服务器上下文
((en|es)/)?
允许选择性地指定两种可接受的语言代码之一。
请注意,我没有为语言部分建议使用通配符,因为我假设您只使用已知的语言子集,因此使用除已知语言代码之外的其他内容(或缺少整个内容)应该属于处理是其他规则(或者可能导致404)。
如果不是这种情况,您可以将正则表达式的第一部分从(en|es)
更改为(.{2})
,如果您预计只有两个字符,或者如果您希望也可以(.{2}(-.{2}))
语言代码,如es-ES
。
答案 3 :(得分:0)
这应该适合你:
RewriteEngine On
RewriteRule ^([a-z]{2})/post/([^/]+)/([0-9]+)/?$ post.php?id=$3&friendly=1&lan=$1 [L,QSA]
RewriteRule ^post/([^/]+)/([0-9]+)/?$ post.php?id=$2&friendly=1&lan=en [L,QSA]