0

mod-rewrite在我的.htaccess文件中使用以下内容:

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等。

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

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

4

4 回答 4

3

以下配置将在其中查找您的静态页面pages/,如果找到,它将显示它们。这不应该破坏 404。把它放在你网站的根文件夹中.htaccess

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d
RewriteRule ^(.*)$ /pages/$1
于 2012-11-18T14:12:37.650 回答
0

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

这很好用,404 error页面再次正确路由。

RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI} -d
RewriteRule ^(.*)$ /pages/$1
于 2012-11-18T18:03:18.760 回答
0

这应该可以实现您正在尝试做的事情。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9\_\-]+)\.html$
RewriteRule (.*) /pages/$1 [L]
于 2012-11-18T00:18:17.870 回答
-1

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

ErrorDocument 404 /path/to/your/404.html
于 2012-11-17T16:56:27.063 回答