0

.htaccess ファイルの代わりに PHP 内から mod の書き換えを処理できるようにしたいのですが、このようにして、新しい書き換えが必要なカスタム モジュールがある場合、.htaccess ファイルをやり直す必要はありません。

WordPress が .htaccess を行う方法を模倣したいと思います。

RewriteEngine On RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php/$1 [L,QSA]

私の現在の.htaccessはこれです:

Options +FollowSymlinks
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# MBP Rules
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=module&prefix=$1&module_page=$2 [NC,QSA,L]
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=module&prefix=$1&module_page=$2&page=$3 [NC,QSA,L]
RewriteRule ^module/([A-Za-z-_]+)/([A-Za-z-_]+)/([0-9]+)/?$ /index.php?p=module&prefix=$1&module_page=$2&id=$3 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/?$ /index.php?p=$1 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/([A-Za-z-_]+)/?$ /index.php?p=$1&s=$2 [NC,QSA,L]
RewriteRule ^([A-Za-z-_]+)/([A-Za-z-_]+)/([0-9]+)/?$ /index.php?p=$1&s=$2&id=$3 [NC,QSA,L]

これを実現する方法を知っている人はいますか?

4

2 に答える 2

2

私の方法は交換することです

RewriteRule ^(.+)$ /index.php/$1 [L,QSA]

RewriteRule ^(.+)$ /index.php?path=$1 [L,QSA]

次に、modrewriteと同様の解析とすべてを実行する必要がありますが、$ _GET['path']でpreg_matchを使用して自分で実行できます。つまり

if (preg_match('/id/([0-9]*)', $_GET['path'], $matches)) {
    Do code;
}
于 2012-04-09T20:04:20.210 に答える
1

確かに、.htaccessファイルを最初の例のように見せて、そこからスクリプトを作成します。

おそらく、ある種のRouterクラスを作成して、リクエストをその場所にルーティングします。基本は、受信したクエリをで分割し、/URLパーツの配列を提供して、条件付けを開始します。

于 2012-04-09T20:02:45.433 に答える