Apache Mod重写规则正在破坏404路由

Apache Mod重写规则正在破坏404路由,apache,.htaccess,mod-rewrite,http-status-code-404,Apache,.htaccess,Mod Rewrite,Http Status Code 404,我正在我的.htaccess文件中使用以下mod rewrite: RewriteRule ^$ pages/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ pages/$1 [L] 其目的是隐藏名为/pages/的子目录,使其不显示在URL中 因此:http://mysite.com/pages/home.html 将如下所示:http://mysite

我正在我的
.htaccess
文件中使用以下
mod rewrite

RewriteRule ^$ pages/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ pages/$1 [L]
其目的是隐藏名为
/pages/
的子目录,使其不显示在URL中

因此:
http://mysite.com/pages/home.html

将如下所示:
http://mysite.com/home.html

这是可行的,但也有一些意想不到的后果

作为我在上面发布的
.htaccess
代码的直接结果,我的404路由不再工作。任何触发404错误页面的操作都会生成
500服务器错误

如何修复


编辑:

如上所述,自定义404页面是否在
.htaccess
中定义并不重要。如果没有它,或者错误页面的路径不正确,服务器仍然应该路由到默认的404页面,并且不会给出
500服务器错误

当然,必须有一种标准的方法来抑制URL的部分,而不破坏404错误的正常路由。从我的在线研究来看,我上面的方法似乎通常会破坏404路由,但到目前为止,我还没有看到适用的解决方案。(这不是Wordpress安装;只是静态HTML内容)


编辑2:

因为我只想从URL中隐藏一个目录,所以我从来没有提到过我还有其他文件和目录,它们是
/pages/
的兄弟,不能指向
/pages/
,例如
/graphics/
/includes/
/cgi-bin/
robots.txt
,favicon.ico等

也许这一切都是徒劳的练习,或者比它的价值更大的麻烦


无论哪种方式都在寻找一个明确的答案。

htaccess
文件中添加一个错误页面方向以处理404页面如何:

ErrorDocument 404 /path/to/your/404.html

这应该实现你正在尝试做的事情

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9\_\-]+)\.html$
RewriteRule (.*) /pages/$1 [L]

下面的配置将在
页面/
中查找您的静态页面,如果找到,它将显示它们。这不应该打破404。 将其放入
.htaccess

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d
RewriteRule ^(.*)$ /pages/$1

感谢@KamilŠrot为您提供最接近的工作解决方案。但是,我需要添加另一个测试(
-d
),以查看请求的URI是否是目录

这是伟大的工作和
404错误
页再次路由正确

RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d
RewriteRule ^(.*)$ /pages/$1

我已经有了。它是否在那里并不重要。即使删除了该行,服务器也会给出一个500,而不是默认的404。Wy不要将/pages/的内容移动到/?Thank@max,当然我已经考虑过了。答案是:因为我想让我的系统在逻辑上有条理,静态内容都放在一个位置。如果真的没有有效的解决方案,那么在URL中显示
/pages/
并不是世界上最糟糕的事情。是的,非常接近!它适用于
/subdirectory/anyPage.html
,但在
/subdirectory/
上使用
404
失败,通常默认为
/subdirectory/index.html
。。。所以你赢得了复选标记。@Sparky672呵呵。干杯!:-)@卡米尔·什洛特不知道我怎么会错过这个,但你救了我一个不眠之夜。我花了至少2个小时才明白,我应该只检查目标文件夹中是否存在该文件。谢谢