0

URLを次の形式で書き換えようとしています

localhost/myapp/view/something or 
localhost/myapp/crud/something

localhost/myapp/view.pl?view=something or
localhost/myapp/crud.pl?action=something

他のすべてのリクエストは、次のようにマッピングする必要があります: localhost/myapp/login から localhost/myapp/login.pl

この .htaccess ファイルで試してみましたが、最後の RewriteRule を有効にすると再帰が発生します。RewriteCond で保護しているため、理由がわかりません。これは私の最初の .htacces mod_rewrite ファイルなので、しばらくお待ちください ;)

RewriteEngine On

RewriteRule ^/?crud/([^/]*)$    /myapp/crud.pl?action=$2 [QSA]

RewriteRule ^/?view/([^/]*)$    /myapp/view.pl?view=$2 [QSA]

RewriteCond $1                     !^/(view|crud)$
RewriteRule ^/?([^/]*)$            /myapp/$1.pl [QSA]

アップデート:

先頭の / を削除し、[L] フラグを追加しました。Apache の error.log に次のエラーが表示されます。

[Mon Jul 09 11:55:33 2012] [error] [client 127.0.0.1] File does not exist: /srv/http/myapp/myapp

新しいファイル:

RewriteRule ^crud/([^/]*)$    myapp/crud.pl?action=$2 [L,QSA]
RewriteRule ^view/([^/]*)$    myapp/view.pl?action=$2 [L,QSA]

RewriteCond $1                !^(view|crud)$
RewriteRule ^([^/]*)$         myapp/$1.pl [QSA]
4

1 に答える 1

1

あなたの URI には myapp が含まれているため、これが にあると想定していDOCroot/myapp/.htaccessます。この場合、ベースは /myapp/ であり、すべての書き換えはこれに関連しています。(ドキュメントで「ディレクトリごと」を探してください。)

RewriteEngine On
RewriteBase   /myapp/

RewriteRule ^crud/([^/]*)$    crud.pl?action=$2 [L,QSA]
RewriteRule ^view/([^/]*)$    view.pl?action=$2 [L,QSA]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(\w+)$            $1.pl             [L,QSA,NS]

また、ファイルまたはディレクトリ名にマップされない限り、/myapp/xxxxx (任意の単語) の UTI を /myapp/xxxxx.pl に書き換えるという最後のルールを変更しました。

また、Tips for debugging .htaccess rewrite rulesも参照してください。この場合、Apache 構成にアクセスできるため、システム構成 (またはApache 2.4 を使用している場合)でRewriteLogおよび を有効にすることを検討してください。RewriteLogLevelLogLevel alert rewrite:trace3

于 2012-07-09T13:16:56.280 に答える