Помощь Htaccess, $ 1 используется до его установки ??? что? - PullRequest
1 голос
/ 04 марта 2010

У меня есть этот фрагмент

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond $1 !^(index\.php|images|img|css|js|robots\.txt)
RewriteRule (.*) index.php?/$1 [L] 

Это не позволит мне получить доступ к файлу по адресу website.com/js/main.php но это позволит мне получить доступ к index.php

Согласно моему веб-хосту, $ 1 вызывается до того, как он установлен. Какие-нибудь решения?

Я приму ответы, когда вернусь завтра. Спасибо!

Ответы [ 2 ]

1 голос
/ 04 марта 2010

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

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond !^(index\.php|images|img|css|js|robots\.txt)
RewriteRule (.*) index.php?/$1 [L,QSA]

... должно работать нормально. Вы, вероятно, захотите, чтобы там был QSA, чтобы при наличии строки запроса он обрабатывался правильно.

0 голосов
/ 08 марта 2010

Ваш веб-хостинг неверен. порядок обработки набора правил :

  1. шаблон в RewriteRule проверен (который заполнит ссылки $N значениями)
  2. связанные RewriteCond условия тестируются (если имеются)

Только если шаблон соответствует текущему пути URL и соответствующее условие выполнено, шаблон применяется.

Таким образом, в вашем случае шаблон (.*) проверяется по текущему пути URL js/main.php (без локального префикса /). Он соответствует ($0 = js/main.php, $1 = js/main.php), поэтому три связанных условия проверяются в порядке их появления:

  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond $1 !^(index\.php|images|img|css|js|robots\.txt)

При условии, что запрашиваемый путь URL /js/main.php не ссылается на существующий файл или каталог, оба условия выполняются. Но третий оценивается как ложное как $1 = js/main.php, а шаблон ^(index\.php|images|img|css|js|robots\.txt) соответствует (^js ответвление) js/main.php. Таким образом, условие не выполняется, и правило не применяется.

...