0

ページ上のすべてのリンクを変更して拡張子を削除することは可能ですか?

Example:
www.domain.com/index.php
changes to
www.domain.com/index

ページ上の実際のリンクを変更して、ユーザーがリンクにカーソルを合わせたときに、毎回リダイレクトを行うのではなく、php拡張子がないようにします。可能かどうかはわかりませんが、php拡張機能を削除するためにすべてのコードを変更するのではなく、この方法で実行したいと思います。

また、次のようなすべてのリンクを書き直すことはできますか?

www.domain.com/index?id=12&sid=2
to
www.domain.com/index/id/12/sid/2

または、実行したいページごとに手動で実行する必要がありますか。

よろしくお願いします!

4

3 に答える 3

1

もちろん。出力バッファリングを使用してこれを行うと思います。だから私は ob_start(); を置きます。ページの上部 (出力の前)、次に下部 $contents = ob_get_contents();

次に、変更を行うための一連の正規表現が必要になります。ここでの詳細は、完全な URL や相対リンクがあるかどうかなど、サイトの構築方法によって異なります。属性などに二重引用符または一重引用符を使用することに一貫性がある場合。ただし、次のようなものです。

$urls = preg_match_all( '|href="http://www.domain.com/[^"]+\.php?[^"]+"|', $contents, $m );
foreach( $m as $u ) {
  $n = preg_replace( "/\?|=|&/", '/', $u );
  $contents = str_replace( $u, $n, $contents );
}
$contents = preg_replace( '|(href="http://www.domain.com/[^"]+)\.php|', $1, $contents );
echo $contents;
于 2013-02-04T01:17:22.810 に答える
0

最初に、これを含むルート ディレクトリに .htaccess ファイルを追加する必要があります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /router.php

これが何をするか: router.php ファイルに存在しないファイルへのすべてのリクエストをリダイレクトします。私の router.php ファイルで、URL (www.domain.com/index) を確認し、適切なファイルを含めます。例 :

$requestURI = explode('/', trim($_SERVER['REQUEST_URI']));
if (isset ($requestURI[1]) && (resquestURI[1] === "index"){
    require "index.php";
}
else {
    //file not found
}

のために "?"。削除できないと思います。GETパラメーターをURLから分離するために使用されます。

于 2013-02-04T01:04:00.193 に答える
0

.php を削除するのは簡単ですが、書き換えを追加するのは難しい場合があります。

wordpress (および他の多くのスクリプト) が行う方法は、PHP スクリプトのすべてをリダイレクトすることです。

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

コードを読んで、それと同様のソリューションを後方設計することができます。

または、URL が常に同じである場合 (たとえば、常に id=12&sid=2 のようなもの)、次のような書き換えルールを追加できます。

RewriteRule ^/index\.php\/?id\=([0-9]+)&sid=([0-9]+)$ /index/id/{$1}/sid/{$2}

それは単なる擬似です-構文はチェックが必要な場合があります。

また、事前にパッケージ化されたソフトウェア パッケージを使用していますか? もしそうなら、それはすでにオプションを持っているかもしれません。お知らせください。

于 2013-02-04T01:03:01.250 に答える