1

書き換えるフォルダーにphpスクリプトを使用してサイトをセットアップしています。/pages/

www.example.com/pages/settings.php

...に...

www.example.com/settings

この.htaccessコードの使用:

RewriteEngine On
RewriteBase /
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?action=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?action=$1 [QSA]

しかし、ユーザー プロファイルもリダイレクトしたいと思います。

www.exmaple.com/user123

ルートにリダイレクトするページもあるため、これに対する最善のアプローチが何であるかはわかりません。

にある変数にuser.php応じて、ユーザーデータを取得する があります。GETurl

(www.exmaple.com/pages/user.php?username=user123)

htaccessしかし、これは最初のページの書き換えと同様にルートに書き換えることが可能かどうか疑問に思っていましたか?

私はこのようなことをしようとしましたが、まだ正しく動作していません:

RewriteRule ^([a-zA-Z0-9_-]+)$ /pages/user.php?username=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /pages/user.php?username=$1 [QSA]

どんな助けでも大歓迎です。

4

1 に答える 1

1

まず、ルールを複製する必要はありません。/?最後にオプションのスラッシュに使用できます

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?action=$1 [QSA]

と同じ

RewriteRule ^([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [QSA]

これらのルールは、末尾のスラッシュの有無にかかわらずリクエストを許可します。

あなたの質問には、同じ文字列を 2 つの異なるターゲットに書き換えたいため、これを達成する方法がわかりません。ユーザーとアクション要求を区別するプレフィックスまたは一意の文字列がない場合は、それを行うことはできません。

/user/user123このルールで書き直せます

RewriteRule ^user/([a-zA-Z0-9_-]+)/?$ /pages/user.php?username=$1 [L,QSA]

アクション ルールにはより一般的な一致パターンがあるため、このルールをアクション ルールの前に配置する必要があります。

また、アクション ルールの前に

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

、、css、javascript、画像ファイルなどの実際のファイルが書き換えindex.phpられるのを防ぎます。user.php

于 2013-04-21T16:50:08.110 に答える