给出不需要的 404 的简单 Apache 重写规则

Posted

技术标签:

【中文标题】给出不需要的 404 的简单 Apache 重写规则【英文标题】:Simple Apache Rewrite Rule Giving Unwanted 404 【发布时间】:2017-11-16 18:50:49 【问题描述】:

我有以下重写规则:RewriteRule ^/uk/(.*)$ http://www.hostname.uk/$1 [R,L]

从以下位置重写 url:

http://www.hostname.uk/uk/homehttp://www.hostname.uk/home

但是,在http://www.hostname.uk/uk/home 上看到的内容不是较短的地址,而是一个空白的 404 页面。为什么是这样?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您拥有的规则是从/uk/home 重定向到/home,但您没有任何东西可以在另一个方向上重写。这就是你需要的。您还应该使用我在这里所做的 301 重定向(永久)。您使用的是 302(临时 - 默认)。当http://www.hostname.uk 没有变化时,您也不需要指定它。

RewriteRule ^/uk/(.*)$ /$1 [R=301,L]
RewriteRule ^/(.*)$ /uk/$1 [L]

我假设您在您的主要 Apache 配置中执行此操作。如果它在您的.htaccess 中,则需要更改。

【讨论】:

此规则包含在虚拟主机文件中。不幸的是,这似乎不起作用,因为我仍然收到在 www.hostname.uk/home 上找不到的 404。 我已经看了好几个小时了,据我所知它应该可以工作。我在这里错过了什么吗?重写条件? /uk/home 有文件吗? 网页文件位于/sites/uk,所以我尝试了以下RewriteRule ^/uk/(.*)$ /$1 [R,L] RewriteRule ^/(.*)$ /sites/uk/$1 [L],但这给了我一个403 Forbidden页面和一个额外的404错误。

以上是关于给出不需要的 404 的简单 Apache 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 重定向到一个路由,但是 apache 给出 404 错误

带有 WSGI 的 Django 在 Apache VirtualHost 后面给出 404

tomcat-jk-apache整合后 地址UrlRewriter 重写乱码的问题

需要 .htaccess 帮助:不存在的 url 301 重定向到 404,而不是直接给出 404

我可以在 Charles Proxy 中创建重写,所以没有给出响应

IIS URL重写不正常404错误