我无法合并多个规则。我只是想不通如何写.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
-尚无法确定。
我已经检查了其他问题,但我真的不明白它是如何工作的,感谢您的帮助。
答案 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以避免浏览器缓存问题。并且一定要在测试之前清除浏览器缓存。