.htaccess 如何使用htaccess从example.com/en转发到example.com/en/?

.htaccess 如何使用htaccess从example.com/en转发到example.com/en/?,.htaccess,rewrite,.htaccess,Rewrite,我一直在尝试为我的htaccess文件编写重写规则,该文件应该从例如www.example.com/en转发到www.example.com/en/ 我尝试:重写规则^en/?$en[L] 但什么也没发生。有人知道如何做到这一点吗?使用: 使用: 您可以在.htaccess文件中使用以下规则: Options +FollowSymLinks -MultiViews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond

我一直在尝试为我的htaccess文件编写重写规则,该文件应该从例如www.example.com/en转发到www.example.com/en/

我尝试:
重写规则^en/?$en[L]
但什么也没发生。有人知道如何做到这一点吗?

使用:

使用:


您可以在.htaccess文件中使用以下规则:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?![^/]*/).*$ %{REQUEST_URI}/ [L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/$ index.php?lang=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?action=$2&lang=$1 [QSA,L]
这将:

  • 外部重定向
    /en
    /en/
    内部重定向
    /index.php?lang=en
  • 内部重定向
    /fr/login
    /index.php?action=login&lang=fr
另外:根据您的评论,您需要此规则才能在域中添加www:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

您可以在.htaccess文件中使用以下规则:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?![^/]*/).*$ %{REQUEST_URI}/ [L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/$ index.php?lang=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?action=$2&lang=$1 [QSA,L]
这将:

  • 外部重定向
    /en
    /en/
    内部重定向
    /index.php?lang=en
  • 内部重定向
    /fr/login
    /index.php?action=login&lang=fr
另外:根据您的评论,您需要此规则才能在域中添加www:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


/en/
是文档根目录下的一个物理目录吗?不,这也是一个重写规则,它将重写/en/to index.php?lang=enOK 2个问题:
1toscho提供的答案对您有用吗<代码>2
之所以将
/en
转发到
/en/
是因为您已经将
/en/
转发到
index.php?lang=en
?这可能不是正确的方式,但我希望/en/应该是转发到index.php?lang=en的标准方式,如果用户键入/en,则应将其转发到/en/(当然,这将转发到index.php?lang=en)。答案没有改变任何东西,它不起作用。好吧,我想现在我明白你想做什么了。请看下面我的答案,让我知道它是否对你有效。
/en/
是DOCUMENT\u ROOT下的物理目录吗?不,这也是一个重写规则,将/en/重写为index.php?lang=enOK 2个问题:
1。
没有toscho提供的答案对你有用?
2。
为什么要将
/en
转发到
/en/
呢,因为你已经将
/en/
转发到
index.php?lang=en
?也许这不是正确的方式,但我希望/en/应该是转发到index.php?lang=en的标准方式,如果用户输入/en这将把他转发到/en/(当然,这将转发到index.php?lang=en)。答案没有改变任何东西,它不起作用。好吧,我想现在我明白你在做什么了。请看下面我的答案,让我知道它是否对你有效。请检查我更新的答案以了解你的要求。同时请记住,它不会在所有内容中添加尾随斜杠
/
。它只会在URI为n的情况下这样做一个文件或目录。很好,只是一件事,登录后不应该有一个/,所以应该是/fr/login检查我的更新答案。我已经测试过了,效果很好。请将此代码完整复制/粘贴到你的文件中。谢谢你的回答,但是从/en到/en/的转发不再有效。你确定吗?因为它仍然是adding在
/en
之后为我添加尾随斜杠。建议您重新启动浏览器或清除缓存。请检查我的更新答案以了解您的要求。还要记住,它不会将尾随斜杠
/
添加到所有内容中。它只会对不是文件或目录的URI执行此操作。非常好,只是一件事,不应该有/登录后,应该是/fr/login检查我的更新答案。我已经测试过了,效果很好。请将此代码完整复制/粘贴到您的文件中。谢谢您的回答,但是从/en到/en/的转发不再有效。您确定吗?因为它在
/en
之后仍在为我添加尾部斜杠。建议您重新启动请关闭浏览器或清除缓存。