如何使用mod rewrite捕获完全限定的本地URL路径?
例如,我的项目位于http://{localhost}/projects/mywebsite/index.php
我尝试使用此RewriteBase /projects/mywebsite/
,但它不适用于ErrorDocument
。
我的.htaccess,
RewriteEngine on
RewriteBase /projects/mywebsite/
ErrorDocument 404 /error.php
我需要做ErrorDocument 404 /projects/mywebsite/error.php
,但它不是动态的。我必须每次为每个项目在两个地方更改它。
有什么想法吗?
答案 0 :(得分:1)
ErrorDocument
是apache核心的一部分,它不受重写内容的影响,这是一个完全独立的模块。
如果您需要输出error.php
的内容,则从php header()输出(基于您之前的问题)并且不依赖于ErrorModule。也许是这样的:
header("HTTP/10 404 Not Found");
include("error.php");
答案 1 :(得分:1)
ErrorDocument
规则不同, mod_rewrite
不接受任何env变量。您可以这样做:
ErrorDocument
使用mod_rewrite
规则来处理404问题(见下文)RewriteBase
值
醇>
您可以在root .htaccess中使用此代码:
RewriteEngine On
RewriteBase /
# Determine the RewriteBase automatically/dynamically
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
# use %{ENV:BASE} variable set above for routing file/dir not found
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . %{ENV:BASE}error.php?e=404 [L,QSA]