请求域别名时返回主页而不是 404
Home page is returned instead of 404 when domain alias is requested
我有一个主域和一个指向主域的域别名。
使用以下 .htaccess
规则,我将域别名的流量路由到子文件夹:
RewriteCond %{HTTP_HOST} ^(www\.)?domainalias\.nl$ [NC]
RewriteRule !^subfolder/ /subfolder%{REQUEST_URI} [L,NC]
这有效,地址栏中仅显示域别名的 URL。
然后我还有一些其他的规则,比如:
RewriteRule ^pagina/([^/]*)/([^/]*)\.html$ /subfolder/result.php?page=®io= [L]
这也有效并显示如下页面:
https://www.domainalias.nl/pagina/socialemedia/drenthe.html
问题来了。我也可以输入 URLs 像:
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 页面。
如何更改这些规则,使它们仅适用于主域?
The main domain is a Wordpress website....
If I remove these, my domain alias works and shows proper 404 pages.
How can I change these rules so that they only apply to the main domain?
这可以说是 WordPress 网站的一个错误。 WP 本身应该生成 404,而不仅仅是提供主页。
但是,您可以在 before 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
这将阻止根 .htaccess
文件中的其他指令(包括 WordPress 前端控制器)在请求被重写到 /subfolder
后被处理,因为 mod_rewrite 指令默认不继承。尽管这确实假定在请求(或重写)/subfolder
时不应处理其他指令。
我有一个主域和一个指向主域的域别名。
使用以下 .htaccess
规则,我将域别名的流量路由到子文件夹:
RewriteCond %{HTTP_HOST} ^(www\.)?domainalias\.nl$ [NC]
RewriteRule !^subfolder/ /subfolder%{REQUEST_URI} [L,NC]
这有效,地址栏中仅显示域别名的 URL。
然后我还有一些其他的规则,比如:
RewriteRule ^pagina/([^/]*)/([^/]*)\.html$ /subfolder/result.php?page=®io= [L]
这也有效并显示如下页面:
https://www.domainalias.nl/pagina/socialemedia/drenthe.html
问题来了。我也可以输入 URLs 像:
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 页面。
如何更改这些规则,使它们仅适用于主域?
The main domain is a Wordpress website....
If I remove these, my domain alias works and shows proper 404 pages.
How can I change these rules so that they only apply to the main domain?
这可以说是 WordPress 网站的一个错误。 WP 本身应该生成 404,而不仅仅是提供主页。
但是,您可以在 before 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
这将阻止根 .htaccess
文件中的其他指令(包括 WordPress 前端控制器)在请求被重写到 /subfolder
后被处理,因为 mod_rewrite 指令默认不继承。尽管这确实假定在请求(或重写)/subfolder
时不应处理其他指令。