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个小时才明白,我应该只检查目标文件夹中是否存在该文件。谢谢