0

.htaccess ファイルにいくつかの規則を適用して apche mod_rewrite を使用しています。

  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]

のようなURLを入力すると機能します

  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

RewriteRules を逆に適用することはできません。RewriteRuleURL をディスク上のファイルにマップし、

  1. 逆は常に可能/明白/ユニークであるとは限らず、
  2. Apache は、PHP で行うこととは何の関係もありません。

URL を生成する独自の PHP コードを作成する必要があります。Apache は、それらの URL への着信要求に対して適切に書き換えることができます。通常、これには(リバース) ルーターが使用されます。私の謙虚な実装については、こちらを参照してください。

于 2013-05-21T08:25:59.703 に答える