невидимый mod_rewrite не всегда невидим !? ("www" и "без поддоменов") - PullRequest
0 голосов
/ 31 января 2012

Мой сайт находится на хосте с использованием cPanel 11.

К сожалению, он перенаправляет как "www.e-motiv.net", так и "e-motiv.net" на public_html.Я хочу соотв.public_html / www и public_html / и это невидимо для конечного пользователя.

Я думал, что лучший способ - через mod_rewrite, поэтому я сделал следующее.

Файловое пространство выглядит следующим образом (из public_html /):

  • /. Htaccess
  • / index.php
  • / www / index.html
  • / www / test / index.html

И я хочу это (вторая часть невидима!):

  1. e-motiv.net -> /index.php
  2. www.e-motiv.net -> /www/index.php
  3. www.e-motiv.net / test -> /www/test/index.php

Я думал, что это подойдетэто:

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

1 и 2 работают, но хотя 3 дает правильный файл, он меняет адрес !?(поэтому невидимый) Итак, в адресной строке вы получите: www.e-motiv.net/test -> www.e-motiv.net/www/test/ Хм ??

Если mod_rewrite не являетсялучшее решение, пожалуйста, скажите!

1 Ответ

1 голос
/ 31 января 2012

Это из-за mod_dir. mod_dir добавляет хвостовую косую черту в URL, которые отображаются в каталогах. mod_dir не знает об этих «виртуальных URL», созданных с помощью mod_rewrite.

Так что отключите это поведение, используя

DirectorySlash Off

Тем не менее, при запросе к www.example.com/folder запросы 404 не найдены. Вы можете исправить это с помощью некоторого rewriterule. Таким образом, полное решение будет выглядеть примерно так:

DirectorySlash Off
#www dir only
RewriteCond %{DOCUMENT_ROOT}/$0 -d
RewriteRule ^www/(.+[^/])$ /$1/ [R,L]
#other dirs
RewriteCond %{DOCUMENT_ROOT}/$0 -d
RewriteRule ^(.+[^/])$ /$1/ [R,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...