【问题标题】:Redirect not working when app not in root当应用程序不在根目录中时重定向不起作用
【发布时间】:2020-05-02 15:19:43
【问题描述】:

如果刚刚下载应用程序,我会设置 .htaccess 文件以重定向到 _install 文件夹。

我遇到的问题是,如果应用程序被上传到根文件夹以外的文件夹,重定向中断。它会尝试转到根文件夹

RewriteEngine on
#allow installation
RewriteCond %{REQUEST_URI} !^/_install

#redirect to _install if vendor does not exist
RewriteCond %{DOCUMENT_ROOT}/vendor !-d 
RewriteRule ^(.*) /_install [L,redirect=302]

#start application if vendor exists
#allow installation to continue
RewriteCond %{REQUEST_URI} !^/_install
RewriteCond %{DOCUMENT_ROOT}/vendor -d 
RewriteRule ^(.*) public/$1 [L]

因此,如果应用程序位于文件夹 /project 中,它会重定向到 /_install 而不是 /project/_install

我如何确保无论应用程序位于哪个文件夹,它都会从该文件夹中获取所有内容?

【问题讨论】:

  • 好吧,如果您使用%{DOCUMENT_ROOT} 检查绝对路径,您几乎不能指望这在这方面是“灵活的”。

标签: php .htaccess


【解决方案1】:

你可以这样使用它:

RewriteEngine on

# Determine the RewriteBase automatically/dynamically in env variable BASE
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$
RewriteRule ^.*$ - [E=BASE:%2]

#allow installation
RewriteCond %{REQUEST_URI} !/_install [NC]
#redirect to _install if vendor does not exist
RewriteCond %{DOCUMENT_ROOT}%{ENV:BASE}vendor !-d 
RewriteRule ^ %{ENV:BASE}_install [L,R=302]

#start application if vendor exists
#allow installation to continue
RewriteCond %{REQUEST_URI} !/_install
RewriteCond %{DOCUMENT_ROOT}%{ENV:BASE}vendor -d 
RewriteRule ^(.*) public/$1 [L]

【讨论】:

  • 谢谢。这工作完美!我在哪里可以了解更多信息?有这方面的文档吗?
  • 查看我的这个答案stackoverflow.com/a/21063276/548225我已经提供了详细的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2015-05-30
相关资源
最近更新 更多