1

私は以前にこの質問をし、理解できなかったコードの断片を使用しましたが、今ではすべてがバラバラになっています。うまくいけば、以前よりも正確に自分の意図を理解することができます。正規表現を学ぼうとしていますが、学んだことをmod-rewriteテクニックに適用できないようです。

.php私のWebサイトには、サイト全体でさまざまなフォルダーの深さで終わるURLがたくさんあります。site.net/folder/folder/filename/サブフォルダの数に関係なく、すべてのURLを使用したいと思います。

私の問題は、いくつかのフォームがPOSTおよびGETリクエストを使用していることです。したがって、ユーザーが[アップロード]をクリックしてファイルをアップロードするとき、私は通常、フォームのアクション部分をファイルに設定し.phpます。たとえばsite.net/folder/script/upload.php、ページsite.net/folder/folder/scripts/upload.phpにリダイレクトする前にファイルのアップロードを処理しxyzます。

.php URLが消去されると、アップロードスクリプトも見つかりません。mod-rewriteルールは、「worker」スクリプト(upload.php、processcontactinfo.phpなど)を妨げることなくphp拡張機能を利用できるように構成できますか?編集

これが私のスクリプトのこれまでの様子です。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^POST\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP
RewriteRule ^(.+)\.php$ http://www.site.net/$1 [R=301,L]
RewriteRule ^([^/]+/)*index/?$ http://www.site.net/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.site.net/$1 [R=301,L]
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*[^/])$ /$1.php [L]
RewriteRule (.*)/$ $1.php [L]

さまざまなバリエーションを試しましたが、前述のように、正規表現を読んだり作成したりするのは苦手です。したがって、ほとんどの場合、試行錯誤の努力がせいぜいです。これにより、site.net / folder / filename /を介してファイルファイルにアクセスできますが、リクエストはsite / folder/filename.phpからsite.net/folder/filename/に変更されません。また、この時点では、さまざまなスクリプトが見つかりません。

4

2 に答える 2

0

このコードがお役に立てば幸いです。このコードは.htaccessファイルに書き込む必要があります。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
于 2012-10-17T13:29:59.803 に答える
0

ファイルをphpファイルとして扱うために必要ですが、拡張子が表示されません

次に、これを使用する必要があります:

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUESTI} ^(GET|POST|HEAD)\ /(.+)\.php($|\?|\ )
RewriteRule ^ /%2 [L,R=301]

最初の 2 つの条件が両方とも true になる方法はありません。また、条件は直後にのみ適用されるRewriteRuleため、2 番目はEVERY TIMERewriteRuleに適用されます。

残りのルールについては、次のとおりです。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://www.site.net/$1 [R=301,L]

これは問題を引き起こす可能性があります。mod_dirは正反対のことを行うため、リダイレクト ループが発生する可能性があります。mod_dir には、重大な情報漏えいのセキュリティ上の問題があるため、末尾にスラッシュが含まれていることに注意してください。. したがって、上記のルールを使用する場合は、以下を含めます。

DirectorySlash Off

mod_dir をオフにして、ブラウザーを URLの末尾にスラッシュをリダイレクトします。RewriteCond最後のビットについては、 aを複数のに適用しようとしているという問題に再び遭遇していますRewriteRule。これらの条件は両方とも にのみ適用されRewriteRule ^(.*[^/])$ /$1.php [L]、最後のルールはまったく条件なしで適用されます。しかし、あなたがやろうとしているように見える場合:

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

RewriteCond %{REQUEST_URI} ^/(.*)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1.php [L]
于 2012-10-17T18:55:02.343 に答える