【问题标题】:HTACCESS redirect controller folder to subdomainHTACCESS 将控制器文件夹重定向到子域
【发布时间】:2020-08-21 02:48:06
【问题描述】:

我遇到了 .HTACCESS 文件的问题。 我正在使用 CodeIgniter 3

场景:

我们有一个域https://example.com,管理面板位于一个文件夹中,例如 application/controllers/manage/<controllers here>

现在我需要这样做。

如果有人去https://example.com/manage 应该被重定向到 https://admin.example.com/manage.

请记住,子域和主域都指向同一个目录。

我也希望这种情况发生:

如果有人访问任何网址,例如 https://admin.example.com/<anyhting-other-than-manage> 重定向到 https://example.com/<anything-other-than-manage> 这是我目前的.htaccess

# gtranslate config
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)/(.*)$ /gtranslate/gtranslate.php?glang=$1&gurl=$2 [L,QSA]
RewriteRule ^(af|sq|am|ar|hy|az|eu|be|bn|bs|bg|ca|ceb|ny|zh-CN|zh-TW|co|hr|cs|da|nl|en|eo|et|tl|fi|fr|fy|gl|ka|de|el|gu|ht|ha|haw|iw|hi|hmn|hu|is|ig|id|ga|it|ja|jw|kn|kk|km|ko|ku|ky|lo|la|lv|lt|lb|mk|mg|ms|ml|mt|mi|mr|mn|my|ne|no|ps|fa|pl|pt|pa|ro|ru|sm|gd|sr|st|sn|sd|si|sk|sl|so|es|su|sw|sv|tg|ta|te|th|tr|uk|ur|uz|vi|cy|xh|yi|yo|zu)$ /$1/ [R=301,L]

RewriteCond %{HTTP_HOST} ^static.example.com [NC]
RewriteRule !^(assets|uploads)/ https://example.com%{REQUEST_URI} [R,L]

RewriteCond %{HTTP_HOST} ^admin.example.com [NC]
RewriteRule !^(manage)/ https://example.com%{REQUEST_URI} [R,L]

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(manage)/ https://admin.example.com/manage%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] 


# procedure was miss spelled
Redirect 301 /yellwo /yellow

# Redirect 301 ......

请帮忙

更新:以下似乎可以将admin.example.com<NOT-MANAGE-URI> 重定向到example.com/<NOT-MANAGE-URI>

<IfModule mod_rewrite.c>
RewriteEngine On

#gtranslate code 
# ........

RewriteCond %{HTTP_HOST} ^static.example.com [NC]
RewriteRule !^(assets|uploads)/ https://example.com%{REQUEST_URI} [R,L]

# REDIRECT ADMIN

RewriteCond %{HTTP_HOST} ^admin.example.com [NC]
RewriteCond %{REQUEST_URI} !^/manage/
RewriteRule (.*) https://example.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] 

.......

之后: 浏览器中的 URL https://admin.example.com/about-us 重定向到 https://example.com/about-us,这是正确的。

但是写https://admin.example.com/manage/ 会重定向到https://example.com/index.php/manage/

【问题讨论】:

  • 什么不适用于您当前的规则集?
  • https://example.com/manage 不会重定向到 https://admin.example.com/manage。虽然https://admin.example.com/manage 重定向到https://example.com/manage
  • 当然/manage不会重定向,如果你的模式是^(manage)/

标签: .htaccess codeigniter redirect url-rewriting subdomain


【解决方案1】:

您可以在 .htaccess 顶部插入此规则以将 example.com/manage 重定向到 admin.example.com/manage

RewriteCond %{HTTP_HOST} ^(?:www\.)?.(example\.com)$ [NC]
RewriteRule ^manage(?:/.*)?$ https://admin.%1%{REQUEST_URI} [NC,R=301,NE,L]

【讨论】:

  • &lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteCond %{HTTP_HOST} ^(?:www\.)?.(example\.com)$ [NC] RewriteRule ^manage/ https://admin.%1%{REQUEST_URI} [NC,R=302,NE,L] 未按预期重定向。 https://example.com/manage 不会重定向到 https://admin.example.com/manage
  • https://example.com/manage 不会重定向到 https://admin.example.com/manage
  • 管理是application/controllers目录中的一个目录。所以这不是example.com/manage 实际存在的东西。它更像example.com/index.php/manage/
  • 这在我的 Apache 上运行良好,因此由于您端的一些本地配置问题而无法运行。
猜你喜欢
  • 2013-11-08
  • 1970-01-01
  • 2012-11-23
  • 2014-03-17
  • 1970-01-01
  • 2012-09-17
  • 2015-03-24
  • 2012-01-09
  • 2017-03-05
相关资源
最近更新 更多