鑒于此目錄結構:
.
├── assets
│ └── img/
│ └── foo.png
├── en
│ └── index.php
└── fr
└── index.php
有兩個域:
english.com
french.com
我的目標是重定向
english.com => english.com/en
french.com => french.com/fr
english.com/fr => french.com/fr
french.com/en => english.com/en
沒有重定向:
english.com/assets/img/foo.png
french.com/assets/img/foo.png
當前的解決方案無法正常作業如何實作上述目標
<IfModule mod_rewrite.c>
RewriteEngine On
# no www, https only
RewriteCond %{SERVER_PORT} !^443$ [OR]
RewriteCond %{HTTP_HOST} ^www\.%{HTTP_HOST}$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^(en) - [L]
RewriteRule ^(fr) - [L]
RewriteRule ^(assets) - [L]
redirectMatch 301 ^/en$ https://english.com/en
redirectMatch 301 ^/fr$ https://french.com/fr
RewriteCond %{HTTP_HOST}: englisch.com$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/en/$1 [R=301,L]
RewriteCond %{HTTP_HOST} french.com$ [NC]
RewriteRule ^(.*)$ https://french.com/fr/$1 [R=301,L]
</IfModule>
uj5u.com熱心網友回復:
像這樣:
RewriteEngine On
# no www, https only
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(. )$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=302,L,NE]
# ignore all rules for anything in assets/ directory
RewriteRule ^assets/ - [L,NC]
# for fr/ host name should be french.com
RewriteCond %{HTTP_HOST} english\.com$ [NC]
RewriteRule ^fr/ https://french.com%{REQUEST_URI} [R=302,L,NE]
# for en/ host name should be english.com
RewriteCond %{HTTP_HOST} french\.com$ [NC]
RewriteRule ^en/ https://eglish.com%{REQUEST_URI} [R=302,L,NE]
# for english.com URI must start with en/
RewriteCond %{HTTP_HOST} english\.com$ [NC]
RewriteRule !^en/ /en%{REQUEST_URI} [R=302,L,NE]
# for french.com URI must start with fr/
RewriteCond %{HTTP_HOST} french\.com$ [NC]
RewriteRule !^fr/ /fr%{REQUEST_URI} [R=302,L,NE]
確認它作業正常后,替換R=302為R=301. 測驗規則時避免使用R=301(永久重定向) 。mod_rewrite
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508412.html
標籤:.htaccess 重定向 改写 url重写 apache2.4
下一篇:如果url無效,如何重定向到主頁
