为特定的重写查询添加尾斜杠


Add trailing slash for specific rewritten query

我正在制作一个"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行之后