【问题标题】:Why does mod_rewrite redirect to /index.php/index.php/index.php etc为什么 mod_rewrite 重定向到 /index.php/index.php/index.php 等
【发布时间】:2018-04-03 00:37:06
【问题描述】:

我希望每个子域都充当一个文件夹,所以基本上:

projects.dev -> /
test.projects.dev -> /test
amazing-project.projects.dev -> /amazing-project

我的虚拟主机文件中有这段代码:

<VirtualHost *:80>
  ServerName projects.dev
  DocumentRoot "D:/xampp/htdocs/projects"
  ServerAlias *.projects.dev
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^(.*)\.projects\.dev
  RewriteRule ^/(.*)$ "D:/xampp/htdocs/projects/%1/$1" [L,R=301]
</VirtualHost>

但是,当我转到“designs.projects.dev”时,它会被重定向到 “designs.projects.dev/index.php/index.php/index.php/index.php/”(/index.php 持续了一段时间)。

有人知道为什么会这样吗?

谢谢。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite xampp


    【解决方案1】:

    你可以使用

    <VirtualHost *:80>
      ServerName projects.dev
      ServerAlias *.projects.dev
    
      DocumentRoot "D:/xampp/htdocs/projects"
    
      RewriteEngine on
    
      RewriteCond %{ENV:REDIRECT_STATUS} ^$
      RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.projects\.dev$ [NC]
      RewriteRule ^ /%1%{REQUEST_URI} [L]
    
    </VirtualHost>
    

    【讨论】:

    • 使用 VirtualDocumentRoot 时服务器没有启动
    • 你的 Apache 版本是多少?
    • Apache 2.4.27 (Win 32)
    • VirtualDocumentRoot 需要 2.4。让我相应地编辑它