отсутствующие каталоги не вызывают ошибку обработки документов htaccess - PullRequest
1 голос
/ 25 сентября 2019

По сути, у меня есть следующий файл .htaccess:

Options -Indexes

ErrorDocument 400 /index.php?error=400
ErrorDocument 401 /index.php?error=400
ErrorDocument 403 /index.php?error=400
ErrorDocument 404 /index.php?error=400
ErrorDocument 500 /index.php?error=400

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Enable sites without extentions
options +MultiViews

<IfModule mod_rewrite.c>
  Options +FollowSymlinks

  # Adaptive-Images -----------------------------------------------------------------------------------

  # Add any directories you wish to omit from the Adaptive-Images process on a new line, as follows:
  # RewriteCond %{REQUEST_URI} !ignore-this-directory
  # RewriteCond %{REQUEST_URI} !and-ignore-this-directory-too

  #RewriteCond %{REQUEST_URI} !img

  # don't apply the AI behaviour to images inside AI's cache folder:
  #RewriteCond %{REQUEST_URI} !ai-cache

  # Send any GIF, JPG, or PNG request that IS NOT stored inside one of the above directories
  # to adaptive-images.php so we can select appropriately sized versions

 # RewriteRule \.(?:jpe?g|gif|png)$ adaptive-images.php

  # END Adaptive-Images -------------------------------------------------------------------------------

  # SEO Friendly Redirect Rules -----------------------------------------------------------------------


    RewriteRule ^(admin)/?$ admin/ [L,NC]
    RewriteRule ^([A-Za-z0-9-]+)/?$ /index.php?title=$1 [L]
    RewriteRule ^([A-Za-z0-9_]+)/([A-Za-z0-9_]*)/?$ index.php?title=$1&ch=$2 [L]
    RewriteRule /$ index.php [END]

На данный момент все правила и условия работают отлично, за исключением одной вещи.Если я перемещаюсь, чтобы сказать: «example.com/nonexistingfolder», он использует это правило для обработки:

RewriteRule ^([A-Za-z0-9-]+)/?$ /index.php?title=$1 [L]

, что приводит к ошибке php, поскольку переданный аргумент недействителен.Чего и следовало ожидать, потому что его не существует.Но если я не перейду к: "example.com/nonexistingfolder/index.php", меня правильно встретят с моей страницей 404, определенной вверху.(не беспокойтесь о косых чертах, в оригинале это постоянные ссылки)

ErrorDocument 404 /index.php?error=400

Я не слишком много знаю за пределами того, что я узнал сегодня о .htaccess и mod_rewrite.Есть ли какой-то другой способ, которым я должен идти об этом?Или я пропускаю другие заявления?

Я попытался добавить следующие строки в мой .htaccess без прогресса:

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d

Либо это не поможет в моем случае (и я думал, что вторая наверняка будет)или я все еще делаю что-то не так.

Я ожидал, что код будет довольно простым, однако это заставило меня почесать голову на пару часов.Спасибо, что нашли время, чтобы прочитать и обдумать это со мной!Иметь хороший.

РЕДАКТИРОВАТЬ: я добавил эти три строки кода:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .? /index.php?error=400 [L]

, который работает, когда я перехожу к чему-то, что не существует.Тем не менее, он прерывает другую RewriteRule, которую я установил: RewriteRule ^([A-Za-z0-9-]+)/?$ /index.php?title=$1 [L]

Так что теперь я точно не знаю, что делать.

Для дальнейшей иллюстрации:

Скажем, я перехожу на "website.com/nonexistingfolder".Что теперь, потому что я добавил три строки выше, показывает страницу 404 правильно.Тем не менее, из-за единственного RewriteRule, приведенного выше, если я перейду к: "website.com/indexquery", он также покажет 404. Как я могу сказать своему .htaccess различать два?

...