如何使用mod_rewrite捕获完全限定的本地URL路径?

时间:2014-11-21 07:41:15

标签: php apache .htaccess mod-rewrite

如何使用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,但它不是动态的。我必须每次为每个项目在两个地方更改它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

ErrorDocument是apache核心的一部分,它不受重写内容的影响,这是一个完全独立的模块。

如果您需要输出error.php的内容,则从php header()输出(基于您之前的问题)并且不依赖于ErrorModule。也许是这样的:

header("HTTP/10 404 Not Found");
include("error.php");

答案 1 :(得分:1)

ErrorDocument规则不同,

mod_rewrite不接受任何env变量。您可以这样做:

  1. 而不是ErrorDocument使用mod_rewrite规则来处理404问题(见下文)
  2. 使用规则
  3. 动态生成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]