2017-05-06 10 views
2

現在、URLから.phpを削除しているファイルがあります。.htaccess URL mod_rewriteを使用したファイル拡張子とフロントコントローラの書き換え

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

私はMain.phpというページがあると私はMain.php?Page=page1.phpを使用して他のページを表示します。私はまだ私の削除.phpルールを許可し、

URL.com/page1 

が可能です。このようMain.php?Page=page1.php表示を行います私の.htaccessファイルにルールを追加したいですか?私のファイルに次の行を追加したとき、私のメインページはループで読み込みを開始しました。

RewriteRule ^(.*)$ Main.php?Page=$1.php [QSA,L] 

この行を間違って記述してループさせましたか?

答えて

1
RewriteRule ^(.*)$ Main.php?Page=$1.php [QSA,L] 

あなたはURLを書き換える前に、必ずMain.phpにまだなっていないようにする必要があります。あなたは、元の要求にクエリ文字列を渡していない場合QSAフラグを削除

# (1) If requesting a ".php" file (including "Main.php") 
# or any known static resource then stop here... 
RewriteRule \.(php|css|js|jpe?g|png|gif)$ - [L] 

# (3) Otherwise, if the request doesn't map to an existing file then rewrite to Main.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) Main.php?Page=$1.php [QSA,L] 

:それは

のようなものを試してみてください... Main.php?Page=Main.php.php&Page=Main....などのループで得られる電流であるものです。


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

.php拡張子を付加あなたの以前のディレクティブは、そうでない場合、これはすべての非phpの要求に.phpを追加します、.phpを追加することは有効なリクエストになりますことを確認しなければならないと決してありませんMain.phpに届きます。何かのように:

# (2) Append ".php" if there is no extension 
# but only if appending ".php" would result in a valid request 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^.]+)$ $1.php [L] 

文字クラスのドットをエスケープする必要はありません。ここではNCフラグは必要ありません。


概要:だから、一緒にこれを持参我々が持っている:

# (1) If requesting a ".php" file (including "Main.php") 
# or any known static resource then stop here... 
RewriteRule \.(php|css|js|jpe?g|png|gif)$ - [L] 

# (2) Append ".php" if there is no extension 
# but only if appending ".php" would result in a valid request 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^([^.]+)$ $1.php [L] 

# (3) Otherwise, if the request doesn't map to an existing file then rewrite to Main.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) Main.php?Page=$1.php [QSA,L] 

UPDATE#2:のみ.phpLoginindexSignup、代わりに存在する任意のファイルを追加します。 その他すべて(存在しないファイルを含む)はMain.phpに書き換えられます。

# (2) Append ".php" to select requests 
# but only if appending ".php" would result in a valid request 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(Login|index|Signup)$ $1.php [L] 

# (3) Otherwise, rewrite everything else to Main.php 
RewriteRule (.*) Main.php?Page=$1.php [QSA,L] 
+0

こんにちは、ありがとう。あなたはメイン以外のどのページでもこれが動作すると言っていますが、これは配列にすることはできますか?私はこれが仕事であることを望んでいない2ページがあるので。 @ w3dk – Liam

+0

これがLogin.phpとindex.phpの動作を停止したためです。 – Liam

+0

最初からMain.phpをロードしようとしています。 – Liam

関連する問題