1

やあ、

私はプロジェクトの途中で、Mod_Rewrite と .htaccess を使用していくつかの URL を変更しています。ファイル拡張子を削除したいのですが、ユーザーがサインインすると、ポータルというフォルダーに移動し、/portal/index.php がすべてのページを実行します。

ここに私が現在持っているコードがあります:

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

これは機能していませんが、私が望んでいる最終結果に近づいていると感じています。

ページの URL は次のようになります。

site.com/home
site.com/otherpage

等々。これらは次の宛先に送信する必要があります。

/home.php
/otherpage.php

ただし、ユーザーがログインすると、URL:

site.com/portal/index.php?page=section/section2/so-on

次のように書き換える必要があります。

site.com/portal/section/section2/so-on

私が持っているものでは、最初のルールは機能しますが、残りは機能しません。

4

2 に答える 2

1

.htaccess では常に、最も具体的なルールから最も一般的なルールへの順序を維持してください。完全な .htaccess は次のようになります。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^portal/(.*)$ /portal/index.php?page=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

説明:

ルール 1 は簡単です。/portal/foo物理ファイルではないすべての URI を に転送しています/portal/index.php?page=foo。フラグ L は最後のルールを表し、QSA は既存のクエリ文字列を追加するため、NC は大文字と小文字の一致を無視するためのものです。

ルール 2 は、URIが実際のディレクトリではなく、実際にファイル calle がある場合のよう/bar/にURI を転送しています。Rexexは、末尾のスラッシュを削除するためにあります (メモは に移動します)。/bar.php/bar.php^(.*?)/?$/bar//bar.php

于 2013-04-08T17:43:45.890 に答える
0

最初のルールが /portal/section/section2/so-on を /portal/section/section2/so-on に送信するため、ルールを並べ替える必要があります。

次のようにする必要があります。

RewriteRule ^(.*)$ $1.php
RewriteRule ^portal/(.*)$ portal/index.php?page=$1 [L,QSA]
于 2013-04-08T17:38:20.537 に答える