我正在制作一个"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;
}
你可以调整你的当前规则,允许url不以/
结尾:
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
这样的URL将不受上述规则的影响,并且您将不会填充language
参数
试试这个:
RewriteCond ^([a-z]{2})$ /$1/ [R=301,L,NC]
把它放在你的RewriteBase
行之后