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