0

我正在使用 apche mod_rewrite 在 .htaccess 文件中应用一些规则,

  Options +FollowSymLinks -MultiViews
  RewriteEngine On
  RewriteBase /
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
  RewriteRule ^ %1.html [R,L,NC]
  RewriteCond %{REQUEST_FILENAME}.php -f
  RewriteRule ^ %{REQUEST_URI}.php [L]
  RewriteRule ^(.*)\.html$ $1.php [nc]

它在输入网址时起作用

  http://localhost:6060/index.php

重定向到

 http://localhost:6060/index.html

但是我需要将页面中的链接转换为 .php 中出现的链接将转换为 .html 扩展名

 <a href="index.php">home</a>

在渲染时它将转换为

<a href="index.html">home</a>
4

2 回答 2

1

根本不需要编写 PHP 代码。Apache 有一个名为mod_proxy_html的模块。

您必须确保您的 apache 覆盖设置允许使用此指令,并且您已加载以下模块:

LoadModule  proxy_module         modules/mod_proxy.so
LoadModule  proxy_http_module    modules/mod_proxy_http.so
LoadModule  headers_module       modules/mod_headers.so
LoadModule  deflate_module       modules/mod_deflate.so
LoadFile    /usr/lib/libxml2.so
LoadModule  xml2enc_module       modules/mod_xml2enc.so
LoadModule  proxy_html_module    modules/mod_proxy_html.so

然后,在您的 中.htaccess,您只需要确保启用了 html 代理地图,并定义您的地图以便 apache 更改这些链接。在你的情况下:

ProxyHTMLEnable On

#if you are using a new version of this module only... sets the Apache 
#to handle url's in href's, and ALSO links in scripts (like javascript), if you are
#changing all .html values these two directives are necesarry, but the second one
#especially adds overhead
ProxyHTMLExtended On
ProxyHTMLInterp On 

从这里......它变得有点棘手,因为不仅仅是改变路径,还有扩展。要应用将 .php 链接更改为 .html 链接的操作,请使用该ProxyHTMLURLMap指令,它需要如下所示:

ProxyHTMLURLMap .php .html $
于 2014-08-16T06:30:53.617 回答
-1

您不能RewriteRule反向应用 s。ARewriteRule将 URL 映射到磁盘上的文件,

  1. 反过来并不总是可能的/明显的/独特的,并且
  2. Apache 与您在 PHP 中所做的事情无关。

您需要编写自己的 PHP 代码来生成 URL,Apache 可以针对这些 URL 的传入请求适当地重写这些代码。通常使用(反向)路由器来执行此操作。请参阅此处了解我对其中一个的简单实现。

于 2013-05-21T08:25:59.703 回答