【发布时间】:2017-02-09 22:51:28
【问题描述】:
我在Apache2 下有一个网站,可以通过不同的 URL 从外部和内部访问。它必须同时在example.com/ 和example.com/sites/mysite/ 上工作。因此,我在我的 HTML 中使用相对 URL,例如:
../static/css/style.css
../some_other_page.html
为了处理对不存在页面的无效请求(例如,example.com/non_existing_page/),我创建了一个自定义错误页面(其中还包含指向网站其他部分的链接)并使用mod_rewrite 将请求传递到那里:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule .* /custom_404_page/ [PT]
因此,用户会看到精心定制的页面,而地址栏仍包含原始请求。此规则也可以根据基本 URL 进行调整。但是,当向子目录(例如,example.com/non/existing/page/)发出无效请求时,错误页面会被破坏,因为链接是相对的(例如,../static/css/style.css 现在解析为 example.com/non/existing/static/css/style.css)。我可以使用[R](重定向)标志而不是[PT]来解决这个问题;但是,地址栏也显示example.com/custom_404_page/,我想避免。
所以想知道在Apache2下运行时是否可以保留所有三个功能:
- 可以在不同的基本 URL 上运行
- 为无效请求显示自定义错误页面
- 在地址栏中保留原始请求
【问题讨论】:
-
你可能想改用
FallbackResource,试试看。
标签: html apache mod-rewrite