繁体   English   中英

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

[英]Add trailing slash for specific rewritten query

我正在开发一个“ManualTranslation”课程,我被困在.htaccess部分。

我试图将此查询重写?language=xx into /xx/ only。

到目前为止,我设法使其工作,不确定它是否有任何好处或正确......但它确实缺少一件事。 如果由于某种原因 - 有人试图通过以下方式手动选择语言:

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/但不是http://domain.com/it因为缺少应该存在的尾随斜杠。

如果有人能告诉我我错过了什么?


此外,我想知道是否有机会删除与php重写的查询字符串,如果它找不到语言。 现在我基本上只是重定向回当前文件,我对它不满意......

if ( isset($query) && !$this->isAllowed($query) )
{
    header("Location: {$_SERVER['PHP_SELF']}");
    exit;
}

您可以调整当前规则以允许不以/结尾的网址:

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 ://domain.com/contacts等http://domain.com/contacts不会受上述规则的影响,也不会填充language参数。

尝试这个:

RewriteCond ^([a-z]{2})$ /$1/ [R=301,L,NC]

把它放在RewriteBase行之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM