我有一个主域和一个指向主域的域别名。
使用以下.htaccess
规则,我将域别名的流量路由到子文件夹:
RewriteCond %{HTTP_HOST} ^(www.)?domainalias.nl$ [NC]
RewriteRule !^subfolder/ /subfolder%{REQUEST_URI} [L,NC]
这是有效的,只有域别名的URL显示在地址栏中。
然后我有一些其他规则,例如:
RewriteRule ^pagina/([^/]*)/([^/]*).html$ /subfolder/result.php?page=$1®io=$2 [L]
这也起作用,并显示如下页面:
https://www.domainalias.nl/pagina/socialemedia/drenthe.html
现在问题来了。我还可以输入URL,如:
https://www.domainalias.nl/pagina/blabla/test/123/socialemedia/drenthe.html
或:
https://www.domainalias.nl/blabla
或任何其他不存在的URL。
这些页面显示了主页,但是,它应该显示一个404错误页面。
可能是由于我将所有内容路由到子文件夹的规则导致的。我该如何防止这种情况发生?
编辑:
对不起,伙计们。我本应该公布完整的.htaccess
文件的。你为我指明了正确的方向。主域是Wordpress网站,因此.htaccess
在文件底部还包括以下规则:
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
如果我删除这些,我的域别名就可以工作,并显示正确的404页。
如何更改这些规则,使其仅适用于主域?
主域是Wordpress网站。。。。
如果我删除这些,我的域别名就可以工作,并显示正确的404页。
如何更改这些规则,使其仅适用于主域?
这可以说是WordPress网站的故障。WP本身应该生成404,而不是简单地为主页提供服务。
然而,您可以在WordPress代码块(前端控制器(之前添加一个异常,如果请求域别名,则阻止请求路由到WordPress,或者更确切地说,当请求主域时,仅。
例如,之前WordPress代码块:
# Prevent further processing if not the main-domain
RewriteCond %{HTTP_HOST} !^(www.)?main-domain.com
RewriteRule ^ - [L]
或者,您可以在/subfolder
目录中放置一个额外的.htaccess
文件,并简单地禁用重写引擎:
# /subfolder/.htaccess
RewriteEngine Off
这将防止在请求被重写到/subfolder
后处理根.htaccess
文件中的其他指令(包括WordPress前端控制器(,因为默认情况下mod_rewrite指令不会被继承。尽管这确实假设在请求(或重写为(/subfolder
时不应处理其他指令。