缺少目录不会触发错误文档处理htaccess

时间:2019-09-25 03:17:39

标签: php apache .htaccess

基本上,我有以下.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区分两者?

0 个答案:

没有答案