.htaccess - .htaccess,如何将语言组合并添加到路径
问题描述
我无法组合多个规则。我就是想不通怎么写.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
- 还无法弄清楚。
我检查了其他问题,但我真的不明白它是如何工作的,感谢任何帮助。
解决方案
主要问题是您的指令顺序错误。您应该在重写之前重定向到.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
到 url 使其看起来像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(临时)。在使用 301 之前先测试 302,以避免浏览器缓存问题。并确保在测试前清除浏览器缓存。
推荐阅读
- c++ - 迭代所有可能的浮点值,从最低开始
- php - 为什么 DateTimeZone 的 getOffset() 需要一个参数?
- ios - NSScrollView (NSTouchBar) 中的 NSPopoverTouchBarItems
- gradle - gradle & maven-publish:“来自”是什么意思?
- typescript - 受约束的泛型函数中令人困惑的“[ts] Type ... 不可分配给类型 [2322]”错误
- html - 使用 CSS 网格、伪元素和固定定位的神秘行为
- php - 特定页面上的 PHPSESSID 为 null
- ionic-framework - 尝试使用设备插件 ionic 4 时出错
- javascript - 如何删除 Javascript EventEmiiter 箭头函数回调
- javascript - Fullpage.js 不会在任何浏览器(chrome、firefox、edge)中滚动