Я пытаюсь установить страницу ErrorDocument 404 с помощью ErrorDocument 404 /404.php
, но это не работает, потому что у меня включен mod_rewrite … Есть ли шанс проверить, существует ли страница, прежде чем она упадет до mod_rewrite? Я публикую свой htaccess ниже … Это вызвано последним правилом, которое перенаправляет все в product.php — RewriteRule ^(.+?)/?$ product.php?url=$1 [L,QSA]
DirectoryIndex index.php
RewriteEngine On
ErrorDocument 404 /404.php
RewriteRule ^(admin|subdom)($|/) - [L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^coming-soon/?$ coming-soon.php [L]
RewriteRule ^tabulky-velikosti/?$ tabulky-velikosti.php [L]
RewriteRule ^o-bambusu/?$ o-bambusu.php [L]
RewriteRule ^vymena-zbozi/?$ vymena-zbozi.php [L]
RewriteRule ^doprava-a-platba/?$ doprava-a-platba.php [L]
RewriteRule ^obchodni-podminky/?$ obchodni-podminky.php [L]
RewriteRule ^ochrana-osobnich-udaju/?$ ochrana-osobnich-udaju.php [L]
RewriteRule ^o-nas/?$ onas.php [L]
RewriteRule ^kontakt/?$ kontakt.php [L]
RewriteRule ^faq/?$ faq.php [L]
RewriteRule ^kosik/?$ cart.php [L]
RewriteRule ^blog/?$ blog.php [L]
RewriteRule ^search/?$ search.php [L]
RewriteRule ^blog/tag/(.*)/? blog.php?tag=$1 [L,QSA]
RewriteRule ^blog/(.*)/? blogDetail.php?url=$1 [L,QSA]
RewriteRule ^search/(.*)/? search.php?s=$1 [L,QSA]
RewriteRule ^zaciname/?$ category.php [L]
RewriteRule ^nakupovat/?$ category.php [L]
RewriteRule ^kategorie/?$ category.php [L]
RewriteRule ^prozkoumat/?$ category.php [L]
RewriteRule ^kategorie/((?:pan|dam|det)ske)-pradlo/?$ category.php?gender=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/?$ product.php?url=$1 [L,QSA]
Что я могу с этим сделать?
Есть еще один способ, которым вы можете сделать это. Вы устанавливаете 404 через RewriteRule
а затем установите ErrorDocument
через URL вместо файла:
RewriteRule ^404/?$ 404.php
ErrorDocument 404 https://www.example.com/404.php
Поместите его под свое последнее правило и удалите [L]
флаг из вашего последнего правила.
Этот метод не должен вызвать проблему с mod_rewrite
, Убедитесь, что вы очистили свой кеш до проверять это.
РЕДАКТИРОВАТЬ
Вы можете просто добавить условие к последнему правилу, чтобы исключить 404.php
страница?
RewriteCond %{REQUEST_URI} !^/404.php
Это остановит перезапись для этой страницы, поэтому ваш код будет:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/404.php
RewriteRule ^(.+?)/?$ product.php?url=$1 [L,QSA]
Других решений пока нет …