Apache 子域上的CodeIgniter和htaccess

Apache 子域上的CodeIgniter和htaccess,apache,.htaccess,codeigniter,Apache,.htaccess,Codeigniter,我正在尝试建立一个基于CodeIgniter的网站。 对于开发,我希望拥有域dev.XXX.com 我改变了我的结构,所以我有一个no\u www和一个public\u www文件夹。 两者都位于dev.XXX.com的根目录下 所以我的想法是重写url的表单 dev.XXX.com/index.php/test 到 dev.XXX.com/public\u www/index.php/test 所以我只想在所有请求中添加public\u www 在我的htaccess文件中,我有: Rewri

我正在尝试建立一个基于CodeIgniter的网站。 对于开发,我希望拥有
域dev.XXX.com

我改变了我的结构,所以我有一个
no\u www
和一个
public\u www
文件夹。 两者都位于dev.XXX.com的根目录下

所以我的想法是重写url的表单

dev.XXX.com/index.php/test

dev.XXX.com/public\u www/index.php/test

所以我只想在所有请求中添加
public\u www

在我的htaccess文件中,我有:

RewriteRule ^(.*)$ /public_www/$1 [L]

但是我总是收到500-内部服务器错误

请尝试将以下内容添加到站点根目录(
public\u www
)中的
.htaccess
文件中

RewriteEngine on
RewriteBase / 

#if its on dev.xxx.com
RewriteCond %{HTTP_HOST} ^dev\.XXX\.com$ [NC] 
#if its not already public_www/ rewrite to public_www/
RewriteRule ^(?!public_www/)(.*)$ /public_www/$1 [L,NC]
您的规则将导致无限重写和随后的500个错误。上面的一个应该可以防止这种情况

编辑


你能解释一下为什么我的版本会导致无限循环吗

关于无限循环,我可能是不正确的,但下面是将会发生的事情

  • 从任何输入开始
  • ^(.*)$
    模式将匹配任何输入
  • 它将重写为
    /public\u www/$1
  • .htaccess规则将再次运行
  • ^(.*)$
    模式将匹配重写的输入
    /public\u www/$1
  • 它将重写为
    /public\u www/public\u www/$1
  • 此时它可能会失败,因为目录不存在

  • 您的RewriteRule模式将匹配所有输入,并将重写为。然后将再次运行.htaccess规则

    尝试将以下内容添加到站点根目录(
    public\u www
    )中的
    .htaccess
    文件中

    RewriteEngine on
    RewriteBase / 
    
    #if its on dev.xxx.com
    RewriteCond %{HTTP_HOST} ^dev\.XXX\.com$ [NC] 
    #if its not already public_www/ rewrite to public_www/
    RewriteRule ^(?!public_www/)(.*)$ /public_www/$1 [L,NC]
    
    您的规则将导致无限重写和随后的500个错误。上面的一个应该可以防止这种情况

    编辑


    你能解释一下为什么我的版本会导致无限循环吗

    关于无限循环,我可能是不正确的,但下面是将会发生的事情

  • 从任何输入开始
  • ^(.*)$
    模式将匹配任何输入
  • 它将重写为
    /public\u www/$1
  • .htaccess规则将再次运行
  • ^(.*)$
    模式将匹配重写的输入
    /public\u www/$1
  • 它将重写为
    /public\u www/public\u www/$1
  • 此时它可能会失败,因为目录不存在

  • 您的RewriteRule模式将匹配所有输入,并将重写为。然后将再次运行.htaccess规则

    那么你想保留index.php?那么你想保留index.php?你能解释一下为什么我的版本会导致无限循环吗?现在我的.htaccess文件位于我的文档根目录下/根目录下。当我用你的htaccess替换我的htaccess时,我有no_www和public_www文件夹。什么都没有发生正如你所说,当我在我的公共www文件夹中创建一个新的.htaccess时,我在访问公共www时仍然收到错误500folder@skelle.htaccess应该位于
    文档根目录中。你能给我你测试过的完整网址吗?我不是说最后一个吗?所以我想他会在这条规则之后停下来,我会在几分钟后发布一个公共URL,解释上是+1——除了它会是一个无限迭代,在Max重定向上失败。我唯一的疑问是IIRC如果您查看这类替换的rewrite.log,通常在每目录处理(例如
    .htaccess
    文件)中删除前导/相对目标会更安全--潜在的奇怪副作用更少。你能解释一下为什么我的版本会导致无限循环吗?现在我的.htaccess文件在我的文档根目录下/根目录下我有no\u www和public\u www文件夹当我用你的htaccess替换我的htaccess时,当我在我的public\u www文件夹中创建一个新的.htaccess时,什么都没有发生,正如你说的,我仍然没有访问公共\u www时出现错误500folder@skelle.htaccess应该位于
    文档根目录中。你能给我你测试过的完整网址吗?我不是说最后一个吗?所以我想他会在这条规则之后停下来,我会在几分钟后发布一个公共URL,解释上是+1——除了它会是一个无限迭代,在Max重定向上失败。我唯一的疑问是IIRC如果你看一下这种类型的替换的rewrite.log,在每目录处理(例如
    .htaccess
    文件)中删除前导/相对目标通常更安全——潜在的奇怪副作用更少。