Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Apache的一些高级功能';什么是改写?_Html_Apache_Mod Rewrite - Fatal编程技术网

Html Apache的一些高级功能';什么是改写?

Html Apache的一些高级功能';什么是改写?,html,apache,mod-rewrite,Html,Apache,Mod Rewrite,我在Apache2下有一个网站,可以通过不同的URL在外部和内部访问。它必须在example.com/和example.com/sites/mysite/上工作。因此,我在HTML中使用相对URL,如: ../static/css/style.css ../some_other_page.html 为了处理对不存在页面的无效请求(例如,example.com/non\u existing\u page/),我创建了一个自定义错误页面(其中还包含指向站点其他部分的链接),并使用mod\u rew

我在Apache2下有一个网站,可以通过不同的URL在外部和内部访问。它必须在
example.com/
example.com/sites/mysite/
上工作。因此,我在HTML中使用相对URL,如:

../static/css/style.css
../some_other_page.html
为了处理对不存在页面的无效请求(例如,
example.com/non\u existing\u page/
),我创建了一个自定义错误页面(其中还包含指向站点其他部分的链接),并使用
mod\u 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\u 404\u page/
,这是我想要避免的

因此,我想知道在
Apache2
下运行时是否可以保留所有三个函数:

  • 可以在不同的基本URL上运行
  • 显示无效请求的自定义错误页
  • 在地址栏中保留原始请求

    • 有一种方法可以解决大多数网站的问题:

      Define MY_ROOT_BASE /sites/mysite/
      Define MY_ROOT_PAGES "(static|index|some_page|some_another_page)"
      
      RewriteEngine On
      RewriteCond %{REQUEST_URI} ^${MY_ROOT_BASE}${MY_ROOT_PAGES}/ [NC]
      RewriteRule .* - [L]
      RewriteRule ^${MY_ROOT_BASE}(.*?/)?${MY_ROOT_PAGES}/(.*)$ ${MY_ROOT_BASE}$2/$3 [NC,R,L]
      
      这将更正所有包含一个根页面名称但不在根位置的请求。例如,
      example.com/sites/mysite/some/bulk/static/css/style.css
      将变成
      example.com/sites/mysite/static/css/style.css
      。第一条规则是保护发动机不受无休止循环的影响


      请注意,如果请求包含多个根页面的名称(例如,
      /index/some\u other\u page/
      ),它将仅在第一次匹配之前修剪无法识别的URL块(由于模式中的非贪婪
      *?
      ),并将请求转发给相应的处理程序(在本例中,转发给
      /index/
      处理程序)。此行为可以根据特定网站的需要进行调整。

      您可能想使用
      后备资源
      ,请尝试一下。