2

これが私が達成しようとしていることです:

クリーンな URL から取得して URL パラメータに変換する必要がある 3 つのポイントがあります。典型的なクリーン URL は次のようになります。

http://mysite.com/page/someAlphaNumeric-OR-emailAddress/file.html

また:

http://mysite.com/page/file.html

また:

http://mysite.com/page/someAlphaNumeric-OR-emailAddress

最初の変数は常に英数字で、2 番目の変数はオプションで、英数字または電子メール アドレスを含むことができます。3 番目の変数 (電子メール/英数字が指定されている場合はオプション) は常にファイル名です。

2 番目の変数についてさまざまなことを試しましたが、問題は、ファイルと電子メール アドレスが競合しているように見えることです。これまでのところ、ソリューションに最も近いと思われるコード:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9-z\-]+)$ index.php?page=$1&id=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)$ index.php?page=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9-z\-]+)/.*$ index.php?page=$1&id=$2&file=$0 [L,QSA]
RewriteRule ^([a-zA-Z0-9]+)/.*$ index.php?page=$1&file=$0 [L,QSA]

ページと、電子メール アドレスとファイル名の両方を提供すると、ファイル名だけにパラメーターが割り当てられます。URL にファイルが含まれていない場合、電子メール アドレスがファイル パラメータに取り込まれます。

もちろん、ページ、英数字、およびファイルを提供すれば、すべてが完全に機能します。条件はおそらくすべてのルールの上に設定される可能性がありますが、私にはわかりません.

4

1 に答える 1

2

これが私があなたに入れるべきだと思うものです.htaccess

RewriteEngine On

# /page
RewriteRule ^(\w+)$ index.php?page=$1 [L,QSA]

# /page/file.html
RewriteRule ^(\w+)/([\w.-]+\.[a-z]{3,4})$ index.php?page=$1&file=$2 [L,NC,QSA]

# /page/id OR /page/email
RewriteRule ^(\w+)/(\w+|[\w.-]+@[\w-]+\.[\w.-]+)$ index.php?page=$1&id=$2 [L,QSA]

# /page/id/file.html OR /page/email/file.html
RewriteRule ^(\w+)/(\w+|[\w.-]+@[\w-]+\.[\w.-]+)/([\w.-]+\.[a-z]{3,4})$ index.php?page=$1&id=$2&file=$3 [L,NC,QSA]

上記のルールはリダイレクトします

/mailbox --> /index.php?page=mailbox
/mailbox/login.php --> /index.php?page=mailbox&file=login.php

/mailbox/SuperJer123 --> /index.php?page=mailbox&id=SuperJer123
/mailbox/superjer@so.com --> /index.php?page=mailbox&id=superjer@so.com

/mailbox/superjer@so.com/inbox.php
                   --> /index.php?page=mailbox&id=superjer@so.com&file=inbox.php

ファイル/ディレクトリが存在するときにリダイレクトが必要ない場合は注意してください。すべてのルールに以下を追加する必要があります

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
于 2013-08-15T11:18:09.857 に答える