我正在进行“ManualTranslation”课程,而且我被困在.htaccess部分。
我正在尝试将此查询?language=xx
重写为/xx/
。
到目前为止,我设法让它发挥作用,不确定它是否有任何好处或正确......但它确实缺少一件事。如果由于某种原因 - 有人试图通过说:
手动选择语言 http://domain.com/it
并且忘记添加尾部斜杠,我的.htaccess碎片失败了。因此,如果此查询参数中缺少斜杠,则应自动添加该斜杠。
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})/(.*)$ $2?language=$1 [QSA]
所以现在,这只会这样:
http://domain.com/it/
但不是http://domain.com/it
,因为缺少尾随斜杠。
如果有人能告诉我我错过了什么?
另外,我想知道如果找不到语言,是否有机会用php
删除重写的查询字符串。现在我基本上只是重定向回当前文件,我对它不满意......
if ( isset($query) && !$this->isAllowed($query) )
{
header("Location: {$_SERVER['PHP_SELF']}");
exit;
}
答案 0 :(得分:1)
您可以调整当前规则,以允许不以/
结尾的网址:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
## Adding a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \s/+.*?[^/][?\s]
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z]{2})(/.*)?$ $2?language=$1 [QSA,L]
但请注意,http://domain.com/contacts
之类的网址不会受到上述规则的影响,您也不会填充language
参数。
答案 1 :(得分:0)
试试这个:
RewriteCond ^([a-z]{2})$ /$1/ [R=301,L,NC]
将它放在RewriteBase
行之后。