htaccess перенесен на vhost, не работает нормально

Я хотел переместить свой файл .htaccess - перенаправляет в мой файл конфигурации vhost...

Это работало, но переадресация htaccess не работала...

<VirtualHost *:80>
ServerName  dev.x.com
ServerAlias dev.x.com
DocumentRoot    "C:/wwwroot/x"
Alias       /modules/    "C:/wwwroot/x/_my_modules/"
ErrorLog    "C:/wwwroot/x/_my_logs/error.log"
CustomLog   "C:/wwwroot/x/_my_logs/access.log" combined
<Directory  "C:/wwwroot/x/_my_logs/" >
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>
</VirtualHost>

Тогда я сделал это -

<VirtualHost *:80>
    ServerName  dev.x.com
    ServerAlias dev.x.com
    DocumentRoot    "C:/wwwroot/x"
    Alias       /modules/    "C:/wwwroot/x/_my_modules/"
    ErrorLog    "C:/wwwroot/x/_my_logs/error.log"
    CustomLog   "C:/wwwroot/x/_my_logs/access.log" combined
    <Directory  "C:/wwwroot/x/_my_logs/" >
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Satisfy all
    </Directory>

    RewriteEngine on

    # if requested URI is not a file and not a directory
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # externally redirect to /newLocation/{URI}
    # RewriteRule (.*) index.php?_req=$1 [L]

    # could use a redirect to a new directory --- 
    RewriteRule ^ /_mf_modules%{REQUEST_URI} [L,R=301]
</VirtualHost>

Моя цель заключалась в следующем: я хотел, чтобы любой несуществующий запрос «каталога» был перенаправлен в каталог с таким именем в каталоге _my_modules.

ЕСЛИ файл не существовал, я хотел перенаправить его в каталог с таким именем в каталоге _my_modules.

Итак, если бы www.x.com/xxx был URL-адресом... и каталога «xxx» не существовало, я бы перенаправлял на www.x.com/_my_modules/xxx

и аналогично, если был запрошен www.x.com/xxx.php, но xxx.php НЕ Существовал, они были перенаправлены на www.x.com/_my_modules/xxx

  • однако (даже если в каждом каталоге есть index.php), это всегда приводит к перенаправлению eURL на этот...

    Запрошенный URL /modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/modules/_my_modules/ не найден на этом сервере .

Так что мне надоело, и я изменил файл vhost обратно на то, с чего я начал, перезапустил Apache, и он все еще перенаправляется, я не могу избавиться от поведения.


person j-p    schedule 10.08.2012    source источник


Ответы (1)


Вы можете переместить RewriteRules из .htaccess в среду VirtualHost, поместив их в среду <Directory> в конфигурации виртуального хоста.

В вашем случае попробуйте скопировать и вставить правила перезаписи в <Directory "C:/wwwroot/x/_my_logs/" >

Если вы действительно хотите поместить их в среду VirtualHost, вам нужно изменить пути в них: RewriteRules в .htaccess или относительно каталога, RewriteRules в VirtualHost являются абсолютными относительно корня файловой системы или DocumentRoot.

пример перезаписи:

RewriteCond %{REQUEST_FILENAME} !-f

должно быть в vhost:

RewriteCond /your/documentroot/%{REQUEST_FILENAME} !-f

пример перезаписи:

RewriteRule (.*) /your/documentroot/index.php?_req=$1 [L]

должно быть в vhost:

RewriteRule (.*) index.php?_req=$1 [L]
person Marc MAURICE    schedule 11.08.2012