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

Php 为特定的重写查询添加尾部斜杠,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我正在学习“ManualTranslation”课程,我被困在.htaccess部分 我正试图将此查询重写为仅限/xx/ 到目前为止,我设法使它工作,不知道它是好的或适当的。。。但有一点是肯定的。如果出于某种原因–有人试图通过以下方式手动选择语言: http://domain.com/it并且忘记添加尾部斜杠,my.htaccess片段失败。因此,如果查询参数中缺少尾随斜杠,它应该自动添加该斜杠 RewriteEngine On Options +FollowSymlinks RewriteBa

我正在学习“ManualTranslation”课程,我被困在.htaccess部分

我正试图将此查询重写为仅限
/xx/

到目前为止,我设法使它工作,不知道它是好的或适当的。。。但有一点是肯定的。如果出于某种原因–有人试图通过以下方式手动选择语言:

http://domain.com/it
并且忘记添加尾部斜杠,my.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;
}
试试这个:

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

将其放在您的
RewriteBase
行之后。

您可以调整当前规则以允许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
将不受上述规则的影响,并且您将不会填充
语言
参数。

内部服务器错误500是,是。我知道语言参数将在每个页面上消失。但我正在将“选定/检测到的”语言存储到会话中以供以后使用。我想我可以使用PHP强制使用语言参数,但我不介意这样做。你的重写现在在有“/”和没有“/”的情况下都能工作,但这可能对SEO不好?我认为它应该只在“/xx/”始终关闭时工作。它是否可以在缺失时强制尾部斜杠?