Я заметил проблему с [OR] в htaccess, которую я не понимаю. То, что я хочу сделать, - перенаправить каждый несуществующий файл и каждый файл, который является .php-файлом (а не /index.php) на/404 /. По моему разумению следующие два блока должны делать то же самое:проблема htaccess - странное поведение [OR]
# .htaccess 1
RewriteEngine on
# cond 1
RewriteCond %{REQUEST_FILENAME} !-f [OR]
# cond 2
RewriteCond %{REQUEST_FILENAME} !index\.php$
# cond 3
RewriteCond %{REQUEST_URI} \.php$
# rule 1
RewriteRule [^\.]*\.[a-zA-Z0-9]+$ /404/ [L]
# rule 2
RewriteRule ^(([^/\.]+)/?)*?$ /index.php [L]
и это:
# .htaccess 2
RewriteEngine on
# cond 1
RewriteCond %{REQUEST_FILENAME} !-f
# rule 1
RewriteRule [^\.]*\.[a-zA-Z0-9]+$ /404/ [L]
# cond 2
RewriteCond %{REQUEST_FILENAME} !index\.php$
# cond 3
RewriteCond %{REQUEST_URI} \.php$
# rule 2
RewriteRule [^\.]*\.[a-zA-Z0-9]+$ /404/ [L]
# rule 3
RewriteRule ^(([^/\.]+)/?)*?$ /index.php [L]
Тем не менее, только второй блок делает то, что я хочу. Например, первый .htaccess - не перенаправляет несуществующий файл a.pdf и вместо этого отображает сообщение сервера по умолчанию о том, что файл не найден.
Может кто-нибудь, пожалуйста, объясните мне это?
Для любого URL-адреса с несуществующим файлом и, например: '/ a.pdf' – eithed
В этом проблема - по моему мнению, оба этих блока должны делать то же самое. Поведение, однако, верно во втором блоке – eithed
Пожалуйста, создайте файл index.php с «A» в нем. Используйте первый .htaccess. Для URL '/ a.pdf' вы получите ответ сервера« Не найден »по умолчанию. Используйте второй .htaccess. Вы получите «A», так как '/ a.pdf' разрешит'/404/', который будет разрешен к'/index.php'. Теперь - почему поведение не одно и то же? – eithed