【发布时间】:2012-11-19 02:03:18
【问题描述】:
我在我的.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 Server Error。
如何解决?
编辑:
如上所述,自定义 404 页面是否在 .htaccess 中定义并不重要。没有它,或者错误页面的路径不正确,服务器仍应路由到其默认的 404 页面,而不是提供500 Server Error。
当然,必须有一种标准方法来抑制 URL 的各个部分,而不会破坏 404 错误的正常路由。 从我的在线研究看来,我上面的方法通常会破坏 404 路由,并且但到目前为止,我还没有看到适用的解决方案。 (这不是 Wordpress 安装;只是静态 HTML 内容)
编辑 2:
由于我只想抑制 URL 中的一个目录,我从未提到我还有其他文件和目录,它们是 /pages/ 的兄弟,不能指向 /pages/,例如 /graphics/ 、/includes/、/css/、/cgi-bin/、robots.txt、favicon.ico等
也许这一切都是徒劳的,或者比它的价值更多的麻烦?
无论哪种方式都在寻找明确的答案。
【问题讨论】:
-
你为什么不把 /pages/ 的内容移动到 / ?
-
谢谢@max_,我当然考虑过。答案是:因为我想让我的系统在逻辑上井井有条,我的静态内容都集中在一个位置。如果真的没有可行的解决方案,那么在 URL 中显示
/pages/并不是世界上最糟糕的事情。
标签: apache .htaccess mod-rewrite http-status-code-404