それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

userdir のチルダをなんとかする

URL からファイルシステム上の位置へのマップ - Apache HTTP サーバ を参考に

userdir と組合せてチルダを消せるようなRewriteパターンを纏めた

/etc/passwd に存在しないユーザーでもマッチするような感じ

Alias で強制マッチさせる

AliasMatch ^/users/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2

Rewrite でマッピングする

RewriteEngine on
RewriteRule   ^/~(([a-z])[a-z0-9]+)(.*)  /home/$2/$1/.www$3

なのとか

replace /~user by the canonical /u/user and fix a missing trailing slash for /u/user.

チルダを別文字列を置換して使う.
Rewriteでかき変えて,~以外の文字列にして、チルダを隠しておく

Rewriterule ^/u/([a-zA-Z0-9]+)/(.*) /~$1/$2 [PT]
Rewriterule ^/u/([a-zA-Z0-9]+)$     /u/$1/   [L,R]

2行あるのは末尾のスラッシュ対応

ドメイン名をFakeしてユーザー名を入れる

チルダの代わりに、ドメイン名にユーザー名を入れる

user.example.comexample.com/~user/ に変換
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9_-]+)\.example\.com$
RewriteRule ^/(.*)$ /~%1/$1 [PT]

ドメイン名に入れるときは,DNSのレコードもワイルドカードにすると良いですね
Bindの場合の設定出来るはず

リクエストURIに基づいて決める

SetEnvIf Referer www\.mydomain\.com intra_site_referral

SetEnvIfしてrewriteするとか

mod_rewritePerlを呼び出してそっちで書換えるとか

強引にPerlを使っている


    RewriteEngine	on
    RewriteLogLevel	0
    RewriteLog	logs/rewrite.log
    RewriteMap	non-tilde-user	prg:/home/rewrite_script.pl
    RewriteRule	^/([^~/]+)/(.*)$	${non-tilde-user:$1|nobody}/$2

http://www7b.biglobe.ne.jp/~lunlumo/bibo/non_tilde.html

おまけ拡張子の書き換えとか

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo\.html$  foo.cgi  [T=application/x-httpd-cgi]

mod_rewrite について

mod_rewriteApacheがディレクトリとURLをマッピングする動作に割り込んで処理をする。
だけど、directory や、Locationや .htaccess にRewriteを設置するのでややこしい.

書き換えは,Rewriteのルールが記述された箇所で実行される.


おおざっぱに言うと

リクエストURL→マッピング→ディレクトリ読込→Rewriteハッケン→Rewrite実行。(ここで書換えたURLを元に再度マッピングする)