Правило не работает для существующих файлов - PullRequest
0 голосов
/ 05 марта 2011

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

И субдомен, и домен ссылаются на один и тот же каталог.Но если первый подкаталог данного REQUEST_URI совпадает с именем файла в каталоге, мои правила, кажется, не соответствуют REQUEST_URI.

Информация:

  • http://sub.domain.tld -> корневой каталог
  • http://domain.tld -> корневой каталог
  • Файл root.php существует в корневом каталоге с содержимым: print_r ($ _ SERVER ['QUERY_STRING']);
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^sub\. [NC]
RewriteCond %{REQUEST_URI} ^/([a-z]+)/ [NC]
RewriteRule ^test/ http://domain.tld/ [L,R=301]
RewriteRule ^([a-z]+)/(.*)$ test.php?dir=$1&data=$2 [L]

С http://sub.domain.tld/xyz/something test.php выдает «dir = xyz & data = кое-что».

Но если я использую http://sub.domain.tld/test/something Iполучить только пустую страницу.Но это также должно вывести «dir = test & data = кое-что».

В чем моя ошибка?Можно ли оптимизировать мои правила?

1 Ответ

1 голос
/ 05 марта 2011

Понял!Мне пришлось отключить MultiView, который был активирован по умолчанию.MultiView полезен для вызова файлов без расширения.Поэтому http://domain.tld/file перезаписывается в файл.EXT (с расширением которого файл хранится на сервере).

Мой сервер изменил REQUEST_URI на /file.EXT/subdir/subfile.html, если явызвал файл, который был сохранен на сервере.

Пример: test.php является допустимым файлом.http://domain.tld/test/something -> request_uri: /test.php/something

Добавьте в свой htaccess-файл:

Options -MultiViews

, чтобы отключить его и заставить его работать!

...