Действительно озадачен, потому что форма и синтаксис кажутся хорошими.
RewriteCond для REQUEST_URI не соответствует явному пути и имени файла. Когда он изолирован, RewriteCond для REQUEST_FILENAME отлично подходит. Я проверил с помощью phpinfo (), что REQUEST_URI содержит начальную косую черту, и также проверил без передней косой черты.
Цель состоит в том, чтобы узнать, что запрос для этого файла и, если он не существует, бросить 410.
RewriteCond %{REQUEST_URI} ^/dir1/dir2/dir3/v_9991_0726dd5b5e8dd67a214c0c243436d131_all\.css$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]
Я не хочу опускать первый Cond, потому что я хочу сделать это только для нескольких файлов, похожих на этот.
ОБНОВЛЕНИЕ I
пытается пройти окончательный тест. Тестовая установка:
- testmee.txt не существует
- запрос для testmee.txt в корне
- подтвердил соответствие request_uri, перенаправив на Google
- не может получить 410 при использовании только первого Cond
- (при использовании только первого Cond сервер обслуживает 404, а не 410)
- (используя оба Conds, сервер обслуживает 404, а не 410)
- МОЖЕТ получить 410 при использовании только второго Cond
RewriteCond %{REQUEST_URI} ^/testmee\.txt$
#RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]
против
#RewriteCond %{REQUEST_URI} ^/testmee\.txt$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=410,L]
ОБНОВЛЕНИЕ II
Ответ для MrWhite:
тьфу, тот же симптом. Возможно, придется жить с роботом Google, нажимающим 404 вместо желаемых 410 для устаревших css / js. Наверное, в конце концов, не важно.
Благодарим вас за перенаправление теста request_uri. В этих тестах все работает нормально. Имена страниц и т. Д. Возвращаются, как и ожидалось, в URL-адресе var = rewrite.
На данный момент, я думаю, что это должна быть некоторая внутренняя обработка 404-х, связанных с расширениями типов файлов. Смотрите подсказку ниже. У меня есть программное обеспечение для корзины покупок Prestashop, и оно должно использовать 404 для типов файлов.
Это перенаправит на Google (для подтверждения соответствия шаблону):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.txt$ http://www.google.com/ [L]
(L flag is needed or else other Rules further down will interfere.)
Это будет продолжать возвращать 404 вместо 410:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.txt$ - [NC,R=410]
И в качестве контрольного теста это вернет 410:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ - [NC,R=410]
Если тип файла css в приведенном выше неудачном тесте, то мой пользовательский контроллер 404 не вызывается. Я просто получаю простой ответ 404, без пользовательского 404, который упакован со всеми шаблонами моего сайта.
Например:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^testmee\.css$ - [NC,R=410]
Боюсь, я потратил немного вашего времени. Мои извенения. Я никогда не думал, что код Prestashop будет форсировать 404 в зависимости от типа файла, но я не вижу другого объяснения. Я мог бы покопаться в этом и, возможно, найти место в Контроллерах, которое это делает. Должен сделать перерыв, хотя.