自从apache更新

时间:2015-07-20 16:00:02

标签: apache .htaccess apache2 rewrite

我有一些.htaccess行可以透明地将我的www子域重写为www子文件夹。现在,自服务器更新以来,它不再起作用了 实际上,它仍然有效,除了没有请求的root(下面的数字1),现在给出404。 这是怎么回事? !^/www不包含空请求吗?

这是我以前想要和工作的:

  1. http://www.e-motiv.net - >子文件夹:www
    不再工作
  2. http://www.e-motiv.net/anything - >子文件夹:www / anything
  3. http://e-motiv.net/www/(anything) - >不要重写
  4. 这些是我的htaccess行:

    #### www -> folder /www (not possible via Control Panel)
    RewriteCond %{HTTP_HOST} ^www\.e-motiv\.net$ [NC] 
    RewriteCond %{REQUEST_URI} !^/www
    RewriteRule ^ /www%{REQUEST_URI} [L]
    #RewriteRule ^(.*)$ /www/$1 [L]  #Variant
    
    #check https://stackoverflow.com/questions/9083514
    DirectorySlash Off
    #www dir only
    RewriteCond %{DOCUMENT_ROOT}/$0 -d
    RewriteRule ^www/(.+[^/])$ /$1/ [L]
    #other dirs
    RewriteCond %{DOCUMENT_ROOT}/$0 -d
    RewriteRule ^(.+[^/])$ /$1/ [L]
    ####
    
    编辑:我发现如果我在第四行添加R,它会再次起作用,除了现在每个人都能看到它,我不想要它。我现在想知道它是否与Internal URL rewrite no longer working after upgrading Apache to 2.4中所说的虫子无关 编辑:第三种情况从“http://e-motiv.net/www”重写为“http://e-motiv.net/www/”,因为没有斜线就没有意义。
    编辑:虽然我的案例下面有一个解决方法,但最好的办法是更新你的apache!我的主人不能,所以对于处于相同情况的人来说,它仍然是有意义的(并且具有指导性)。

1 个答案:

答案 0 :(得分:1)

此规则在Apache 2.4中对我有用:

DirectoryIndex index.php
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.e-motiv\.net$ [NC]
RewriteRule ^/?$ www/ [L]

RewriteCond %{HTTP_HOST} ^www\.e-motiv\.net$ [NC]
RewriteRule ^((?!www/).*)$ www/$1 [L,NC]