У меня есть следующий файл .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]
в твоем случае.