2015-10-11 49 views
3

我正在研究“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; 
} 

回答

1

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

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参数。

+0

是的,是的。我知道语言参数将在每个页面重定向。但我将“选定/检测”语言存储到会话中供以后使用。我假设我可以使用PHP来强制语言参数,但我不介意这样。 你的重写现在可以用“/”工作,没有它,但这可能不适合搜索引擎优化?我认为它应该只作为“/ xx /”总是关闭。失踪时可以强制结尾斜线吗? – dvLden

+0

好的尝试我更新的答案。 – anubhava

+1

太棒了!它正在按我的预期工作。 – dvLden

0

试试这个:

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

把它只是你的RewriteBase行之后。

+0

内部服务器错误500 – dvLden