Intereting Posts
Есть ли риск запуска file_put_contents () в том же файле из разных потоков PHP? php тот же результат, добавляющий различное количество vars PHP запоминает содержимое поля файла Библиотека кэша файлов для PHP PHP MySQL вставляет многомерный ассоциативный массив, строящий запрос из ключей массива Как создать триггеры в библиотеке миграции Codeigniter Установить значение по умолчанию для элемента управления выбором HTML в PHP laravel – использовать класс запроса или класс ввода PHP и NLP: вложенная скобка (результат анализатора) в массив? Объединить 2 массива разной длины как создать завод в zend framework 2? Ничто не переводится с использованием gettext PDF, созданный с помощью FPDF и способ сохранения и извлечения PDF Вычисление среднего цвета между двумя цветами в PHP, используя номер индекса в качестве эталонного значения Как получить общее количество столбцов, если строки разбиты на страницы?

Как заставить .htaccess использовать для маршрутизации, чтобы не маршрутизировать файлы .css, .js, .jpg и т. Д.?

У меня есть следующий файл .htaccess в подкаталоге сайта, который позволяет мне маршрутизировать все URL-адреса в index.php, где я могу их проанализировать.

Однако это не позволяет использовать стандартные файлы, которые мне нужны для веб-сайта, например, css, javascript, png и т. Д.

Что мне нужно изменить (я предполагаю в четвертой строке), чтобы разрешить эти файлы, чтобы они не попадали в index.php?

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(index\.php|public|css|js|png|jpg|gif|robots\.txt) RewriteRule ^(.*)$ index.php/params=$1 [L,QSA] ErrorDocument 404 /index.php 

Что-то я заметил. Вы используете косую черту вместо вопросительного знака … перенаправление params обычно выглядит следующим образом:

 RewriteRule ^(.*)$ index.php?params=$1 [L,QSA] 

Это должно работать само по себе, так как любой из этих файлов * должен * быть реальными файлами.

 ErrorDocument 404 /index.php RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?params=$1 [L,QSA] 

Чтобы сайт игнорировал определенные расширения, вы можете добавить условие для игнорирования дела и проверить только конец имен файлов в запросе:

 RewriteEngine On RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?params=$1 [L,QSA] 

Если вы пытаетесь игнорировать папку, вы можете добавить:

 RewriteEngine On RewriteCond %{REQUEST_URI} !(public|css) RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?params=$1 [L,QSA] 

Самое простое – игнорировать их явно в начале ваших правил:

 RewriteRule \.(css|js|png|jpg|gif)$ - [L] RewriteRule ^(index\.php|robots\.txt)$ - [L] 

Это позволит избежать их повсюду с помощью RewriteCond.

По вашему выбору убедитесь, что файл существует до этого:

 RewriteCond %{REQUEST_FILENAME} -f RewriteRule \.(css|js|png|jpg|gif)$ - [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(index\.php|robots\.txt)$ - [L] 

(Обратите внимание, что проверка файла создает дополнительный доступ к диску.)

У вас есть правильная идея, настройка четвертой строки. ^ Говорит, что различные строки соответствия должны быть в начале строки. Если вам все равно, где какое-либо из них появляется в файле, вы можете просто удалить ^ . Это позволит избежать перезаписи * .css, * .js и т. Д .; но также не будет переписывать publicideas.html.

Если вы хотите ограничить только суффиксы, попробуйте следующее:

 RewriteCond $1 !^(index\.php|public|.*\.css|.*\.js|.*\.png|.*\.jpg|.*\.gif|robots\.txt)$ 

Это говорит о том, чтобы соответствовать чему-либо в начале, а затем a . , то суффикс. $ Говорит, что они совпадают в конце (ничего ниже).

Я не уверен в public , поэтому я оставил ее (что означает абсолютно публичное, ни с чем другим – возможно, не то, что вы имели в виду, но вы можете добавить * до или после, или и то, и другое).

RewriteCond %{REQUEST_FILENAME} !-f только должно быть достаточно.

Другой вариант – исключить определенные файлы из перезаписи. Из пакетов TYPO3:

 # Stop rewrite processing, if we are in the typo3/ directory. # For httpd.conf, use this line instead of the next one: # RewriteRule ^/TYPO3root/(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L] RewriteRule ^(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L] 

Это правило должно появиться перед вашим фактическим переписыванием. Должен быть

 RewriteRule ^(public/|*\.css|*\.js|*\.png|*\.jpg|*\.gif|robots\.txt) - [L] 

в твоем случае.