[英]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.