.htaccess,如何组合语言并将其添加到路径

时间:2018-11-06 14:50:46

标签: .htaccess mod-rewrite

我无法合并多个规则。我只是想不通如何写.htaccess

我的.htaccess

RewriteEngine on
RewriteRule (.*) web/$1 [L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

我将如何结合这些?现在只有第一个规则有效web/$1

还有所有这些,如何添加一个额外的重定向到语言?

澄清我想做什么:

  • 用户写入example.com ,因为我的索引文件位于根的/web中(有效)

  • 现在应该将他重定向到www.example.com 不起作用

  • 之后,将/en添加到URL,使其看起来像www.example.com/en -尚无法确定。

我已经检查了其他问题,但我真的不明白它是如何工作的,感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

主要问题是指令的顺序错误。在重写为www.example.com之前,您应该重定向到web/<whatever>

例如:

RewriteEngine on

# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Internally rewrite to "web" subdirectory.
RewriteRule (.*) web/$1 [L]

我假设您在.htaccess子目录中还有另一个/web文件,该文件也使用mod_rewrite-否则最后一个指令将导致重写循环。

  

之后,在网址中添加/en,使其看起来像www.example.com/en

您需要先执行 ,然后再将URL重写到web子目录中。我假设您可能正在请求www.example.com/<page>,而这应该重定向到www.example.com/en/<page>

尝试以下操作:

RewriteEngine on

# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=302,L]

# Redirect to "/en" if not already present at the start of the URL
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule (.*) http://%{HTTP_HOST}/en/$1 [R=302,L]

# Internally rewrite to "web" subdirectory.
RewriteRule (.*) web/$1 [L]

在重定向之前,RewriteCond指令检查URL路径是否不以!开头(/en/)。

请注意,我已将重定向更改为302(临时)。先使用302s进行测试,然后再使用301s以避免浏览器缓存问题。并且一定要在测试之前清除浏览器缓存。