Перенаправление домена .htaccess в папку, но предотвращает прямой доступ с 404 - PullRequest
2 голосов
/ 05 октября 2011

У меня есть общий хостинг, на котором я хочу разместить несколько сайтов. С этой целью и для ясности я перенаправил свой основной домен (например, www.mydomain.com) в папку (т.е. /mydomain.com/). Однако я хочу запретить прямой доступ к этой папке (www.mydomain.com/mydomain.com/) с URL-адреса с ошибкой 404. (не найдено).

Это .htaccess в корневом каталоге:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/mydomain.com/0.1/$ [NC]
RewriteRule ^(.*)$ /mydomain.com/0.1/$1
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [NC]
RewriteRule ^(/)?$ mydomain.com/0.1/index.php [L]

RewriteCond %{THE_REQUEST}% ^[A-Z]{3,9}\ /mydomain\.com/ [NC]
RewriteRule . - [R=404,L]

И это .htaccess в / mydomain / с кучей правил для красивых и аккуратных URL.

RewriteEngine On
RewriteRule ^about/(.+) index.php?a=about&b=$1
RewriteRule ^services/(.+) index.php?a=services&b=$1

Прямо сейчас это результат:

При доступе к www.mydomain.com содержимое в / mydomain / отображается так, как и ожидалось. Тем не менее, также отображается www.mydomain.com/mydomain/, игнорируя правило 404 и создавая другую папку - независимо от имени - без htaccess, ВЫБРАВАЕТ 404.

Я занимался этой проблемой уже 5 дней и перепробовал все. На данный момент я не знаю, произошла ли ошибка от корня .htaccess или папки.

Заранее спасибо.

PS: Просто чтобы прояснить, я не могу контролировать файл httpd.conf.


Примечания:

  1. Я забыл сказать, что в /mydomain.com/ есть дополнительная папка /0.1/ для контроля версий.
  2. Если после "RewriteEngine On" в /mydomain.com/0.1/ htaccess включить "RewriteOptions Inherit", я получаю внутреннюю ошибку 500.
  3. Удаление файла /mydomain.com/0.1/ htaccess в целом приведет к желаемой ошибке 404 для www.mydomain.com/mydomain.com/0.1/ и выдаст 505 на www.mydomain.com

1 Ответ

0 голосов
/ 05 октября 2011

Флаг R в правиле перезаписи должен быть между 301 и 399, поэтому он не может быть 404 !!!Ваше правило должно выглядеть следующим образом:

RewriteCond %{THE_REQUEST}    ^/mydomain\.com/? [NC]
RewriteRule (.*)  throw_404.php [L]

создать throw_404.php и отправить код статуса 404!и добавьте флаг L в ваше первое правило, чтобы избежать конфликта между этим правилом и моим!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...