mod_rewriteを使用して練習する

この記事は、Apache Rewriteモジュールに既に精通しており、常にではないかもしれませんが、困難な生活の中で使用する人を対象としています。 この問題は、PHPをサーバー側のスクリプト言語として使用するという文脈で考慮されています。



Habréに関する適切な記事を見つけられなかったため、このギャップを埋めて、Apacheのmod_rewriteなどのすばらしいツールについてさらに詳しく説明することにしました。 美しいURLを作成する複雑さをすべて説明するのではなく、ApacheでのPOSIXのような正規表現パーサーの操作を説明します。 この中で、mod_rewriteに関する最後の記事ではなく、使用の問題について詳しく説明したいと思います。 要するに-なぜmod_rewriteと小さな例でそれが与えるもの。



問題



私の活動では、多くのプログラマーが、無知であったり、ツールを全力で使用したがらないために、ソースのナンセンスをだまし始めた面白い瞬間に出くわしました。 具体的な例として、ほとんどすべての「マルチプラットフォームマルチタスクスクリプト、CMSでもこの種類のものでも、着信URLをコンポーネントに解析するための何らかの方法を見つけました。



しかし、最大のプロジェクトであっても、ナビゲートするURLの数は任意の数によって制限されます。 そして、それらのほとんどに正規表現を完全に通過できる繰り返し要素(たとえば、idまたはその他の「代替」)が含まれていることを考慮すると、「基本」URLの非常に小さなセットが取得されます。プロジェクト全体を構築しました。



実際、プロジェクトのホスティングにmod_rewriteが存在しないことは、長い間マナーが悪いと考えられてきました。 それでは、この素晴らしいツールを使用してみませんか?



解決策



ここで、開発者は明らかに問題に直面しています-mod_rewriteを調べるか、スクリプト言語の側でURLパーサーを使用/作成します。



主な間違いと主な間違いは、このためになじみのないmod_rewriteを使用するためにユニットが使用されることです。



1.パーサーURL


:



RewriteRule ^(.*)$ index.php?param=$1 [QSA,L]







:



RewriteRule ^/pages/([0-9A-z_]{1,64}).html$ index.php?mod=Pages&page_link=$1 [QSA,L]







:

  1. , . mod_rewrite , , .
  2. , , , , , . URL — mod_rewrite. , .


2.


mod_rewrite — . , . — . , , , URL, id id ?



, . mod_rewrite :



RewriteRule ^/products/([0-9]{1,8}).html$ index.php?mod=Products&product_id=$1 [QSA,L]

RewriteRule ^(.*)$ index.php?mod=Errors&error_id=404 [QSA,L]







, , . ? , , , , Apache. — , - .



3. -


, mod_rewrite .



RewriteRule ^(.*)/(.*)/var=([^/]+)/ $1/$2 [E=VAR:$3]





Apache , GET-. , , POST GET , -.



„“ — .





mod_rewrite :

  1. Apache Module mod_rewrite
  2. URL Rewriting Guide
  3. URL Rewriting Guide — Advanced topics


mod_rewrite phpclub.ru.





, Apache mod_rewrite — Web- Linux-Apache based . . , .



P.S.

1. , . Rewrite Guide. — .

2. - — , mod_rewrite , - . — .

3. . — ^_^



UPDATE





. , . .



Test Cases:



1. PHP Native

.htaccess:

RewriteEngine On

Options +FollowSymlinks

RewriteBase /

RewriteRule ^(.*)$ index.php?params=$1 [QSA]







index.php:

<?php

$URI = $_GET['params'];

$params = array_values(array_filter(explode('/', $URI)));

print_r($params);









2. Apache mod_rewrite

.htaccess:

RewriteEngine On

Options +FollowSymlinks

RewriteBase /

RewriteRule ^([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/([A-z0-9]{0,})/$ index.php?0=$1&1=$2&2=$3&3=$4&4=$5&5=$6&6=$7&7=$8 [QSA,L]







index.php:

<?php

print_r($_GET);









3. PHP preg_match

htaccess:

RewriteEngine On

Options +FollowSymlinks

RewriteBase /

RewriteRule ^(.*)$ index.php?params=$1 [QSA]









index.php:

<?php

$URI = $_GET['params'];

preg_match ( "/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\/([A-z0-9]{0,})\//" , $_GET['params'], $params);

print_r($params);









:

. Apache Bench :

ab -c 10 -n 100000 test.com/param/val/param1/val/param2/val/param3/val









:

:



kasumi ~ # uname -a

Linux kasumi 2.6.24-tuxonice-r9 #1 SMP Sun Jul 13 02:57:59 Local time zone must be set--see zic i686 Intel(R) Pentium(R) M processor 1.60GHz GenuineIntel GNU/Linux



kasumi ~ # lshw

kasumi

description: Notebook

product: SX10P

vendor: Samsung Electronics

*-cpu

description: CPU

product: Intel(R) Pentium(R) M processor 1.60GHz

*-memory

description: System Memory

physical id: e

slot: System board or motherboard

size: 768MiB

*-disk

description: ATA Disk

product: HTS424040M9AT00

vendor: Hitachi

physical id: 0

bus info: ide@0.0

logical name: /dev/hda

version: MA2OA71A

serial: MPA241Q2DPTHJA

size: 37GiB (40GB)



kasumi ~ # apache2 -v

Server version: Apache/2.2.8 (Unix)

Server built: Jun 13 2008 20:05:00



kasumi ~ # php -v

PHP 5.2.6-pl7-gentoo (cli) (built: Oct 18 2008 13:21:57)

Copyright (c) 1997-2008 The PHP Group

Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies









:


1. PHP Native:

Requests per second: 1570.26 [#/sec] (mean)

Time per request: 6.368 [ms] (mean)

Time per request: 0.637 [ms] (mean, across all concurrent requests)



2. Apache mod_rewrite:

Requests per second: 1579.41 [#/sec] (mean)

Time per request: 6.331 [ms] (mean)

Time per request: 0.633 [ms] (mean, across all concurrent requests)



3. PHP preg_match

Requests per second: 1528.33 [#/sec] (mean)

Time per request: 6.543 [ms] (mean)

Time per request: 0.654 [ms] (mean, across all concurrent requests)



chart



, , mod_rewrite , PHP.



All Articles