2011-07-22 3 views
0

私はマッピングしたいと思います:スタックオーバーフロースタイルのユーザーURLを作成するにはどうすればよいですか?

mywebsite.com/users/ - >mywebsite.com/users/users.php
mywebsite.com/users - >mywebsite.com/users/users.php
mywebsite.com/users/username - >mywebsite.com/users/user.php?name=username現在

、私は、ユーザーディレクトリにこの.htaccessを使用しています:

RewriteEngine On 

RewriteRule ^([a-zA-Z0-9_])*$ user.php?name=$1 [L] 
RewriteRule ^.*$ users.php [L] 

ただし、user.php?name=$1というURLは生成されません。

なぜ機能しないのですか?

答えて

1

は、ルールは(Webサイトのルートフォルダで.htaccessファイル内の場所いくつかの調整が必要な別の場所に置いた場合。)です:

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase/

# 1 
RewriteRule ^users/?$ /users/users.php [L] 

# 2 
RewriteCond %{REQUEST_URI} !^/users/users?\.php 
RewriteRule ^users/([^/]+)$ /users/user.php?name=$1 [QSA,L] 
  1. ルール#1は、拳にあなたの2のURLと一致します。

  2. ルール#2は、特定のユーザーマッピングで機能します。既に書き換えられたURLは書き換えられません。


UPDATE: あなたが/users/フォルダに.htaccessファイルにそれを配置したい場合は、(スラッシュを付けずに)このURL mywebsite.com/usersはほとんど機能しません。

しかし、どのような場合には - ここでは、ルールは以下のとおりです。

Options +FollowSymLinks -MultiViews 
RewriteEngine On 

# 1 
RewriteRule ^$ users.php [L] 

# 2 
RewriteCond %{REQUEST_URI} !^/users/users?\.php 
RewriteRule ^([^/]+)$ user.php?name=$1 [QSA,L] 
+0

私は、ユーザーのサブディレクトリで動作するようにそれらを微調整するにはどうすればよいですか?どのビットが絶対的で、どれが相対的であるかは決してわかりません – Eric

+0

@Eric私の更新された答えを見て、 'mywebsite.com/users'(' users'の終わりに '/'はスラッシュ '/' (しかしそれは他のApache設定ディレクティブに依存しますが)ルールがルートの.htaccessにある場合に動作します。 – LazyOne

+0

'-MultiViews'は何をしますか? – Eric

0

URLは最初のルールと一致するので、user.php?name=$1が追加され、2番目のルールと一致するため、users.phpという文字列が置き換えられます。それが問題ならば、特定のケースでは、2番目の正規表現を^/?$に置き換えることで修正できます。ここで

関連する問題