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