Php Htaccess需要:http到https-不存在文件、文件夹、子域到404-只有第一个有效

Php Htaccess需要:http到https-不存在文件、文件夹、子域到404-只有第一个有效,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我需要在.htaccess中添加重写,如标题中所述,但只有第一个可以工作,下面是我的.htaccess现在的样子: RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

我需要在.htaccess中添加重写,如标题中所述,但只有第一个可以工作,下面是我的.htaccess现在的样子:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.php [R,L]

ErrorDocument 404 /404.php
不起作用的示例

这两个不存在的子域示例只是挂起,然后显示“无法连接”,但我希望它们显示真正的404错误页面:

http://nonexisting.example.com
https://nonexisting.example.com
如果我们输入不存在的文件或文件夹,例如:

https://example.com/nonexistingfile.php
https://example.com/nonexistingfolder/
它显示了我的404.php页面,但它们显示为一个软404,我希望它显示真正的404错误页面


我尝试了第二个重写部分的大约30种不同的变体,但都没有成功。有些代码返回了一个真正的404代码,但显示了一个混乱的页面,而不是我的404.php页面

这里不需要重写规则,只需使用
R=302
将所有不存在的文件或目录重定向到
/404.php

请尝试以下代码:

# will send correct 404 status as well
ErrorDocument 404 /404.php

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=302,NE,L]

这里不需要重写规则,它只是将所有不存在的文件或目录重定向到
/404.php
,使用
R=302

请尝试以下代码:

# will send correct 404 status as well
ErrorDocument 404 /404.php

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=302,NE,L]


您所说的
SOFT 404
是什么意思?除非您有通配符DNS记录,否则“不存在的子域”工作正常。@anubhava Accorind to google:目标URL不存在,但您的服务器没有返回404(未找到文件) error@TiggerDNS设置为:Type | Host | Value A Record |@| IP-ADDRESS URL Redirect Record | www | h t p s://example.com因此您需要一个通配符DNS条目:
*.yourdomain.com
您所说的
SOFT 404
是什么意思?“不存在的子域”除非您有通配符DNS记录,否则无法正常工作。@anubhava Accorind to google:目标URL不存在,但您的服务器没有返回404(未找到文件) error@TiggerDNS设置为:Type | Host | Value A Record |@| IP-ADDRESS URL Redirect Record | www | h t t p s://example.com所以你需要一个通配符DNS条目:
*.yourdomain.com
它的工作方式似乎与我尝试过的另一个类似,它显示的是真正的404代码,但页面(404.php)似乎风格混乱,html等。有什么想法吗?我已经添加了完整的链接到每个css,js,图像分别没有任何效果。我没有使用您的示例中的其他重写。除了标头($\u SERVER[“SERVER\u PROTOCOL”]“404 Not Found”);或标头(“未找到HTTP/1.0 404”)?我的
404.php
没有任何
header
函数。只有常规的HTML数据和定制的消息和常见的css/js/images链接,你知道吗,我制作了一个全新的404.php,没有任何php头,现在一切看起来都非常好!它看起来像我试过的另一个一样,它显示的是真实的404代码,但页面(404.php)似乎被样式、html等弄乱了。有什么想法吗?我分别为每个css、js、图像添加了完整的链接,但没有任何效果。我没有使用您的示例中的其他重写。除了标头($\u SERVER[“SERVER\u PROTOCOL”]“404 Not Found”);或标头(“未找到HTTP/1.0 404”)?我的
404.php
没有任何
header
函数。只有常规的HTML数据和定制的消息和常见的css/js/images链接,你知道吗,我制作了一个全新的404.php,没有任何php头,现在一切看起来都非常好!