2012-01-24 25 views
-2

が動作しません。MOD_REWRITEこれは動作しません

RewriteRule ^([^/]+)([/]?)$ /index.cgi?l=$1 [NC,L] 

これは動作しません:

RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L] 

.htaccessファイル内の他のルールはありません。ここに完全版があります:

Options -Indexes 
Options ExecCGI 
AddHandler cgi-script .cgi .pl .q 
ErrorDocument 500 /error500.cgi 
ErrorDocument 404 /error404.cgi 
Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L] 

これは機能しますが、私の望むものではありません。

RewriteRule ^([^/]+)/([^/]+)$ /index.cgi?l=$1&a=$2 [NC,L] 

最初のスラッシュと2番目のディレクトリの両方をオプションにします。疑問符は、それが想定されているように0または1のインスタンスに一致しないのはなぜですか?私はここでおかしいです...

+2

正確に、あなたは「動作しない」とはどういう意味か?最初から始め、あなたがしようとしていることを説明してください。 –

+0

申し訳ありませんが、私は変数としてCGIスクリプトに 'ディレクトリ'名を渡そうとしています。しかし、2番目の 'ディレクトリ'は、前のスラッシュと同様に要求される場合とされない場合があります。 – freeworlder

答えて

0

$を使用すると、テキストの最後であることを指定しているので、/の後には何も一致しません。 (正規表現では、^は、文字列の先頭を指定し、$は終わりを指定する)あなたは$を削除することができ

、それは2番目のパラメータはオプションになります - それはあなたが探しているもののように聞こえます。

あなたのmod_rewriteが正しく動作しているかどうかを確認するために、これを試してみてください:

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [R,L] 
+0

'code'RewriteRule ^([a-z] +)/?([a-z] +)? /index.cgi?l=$1&a=$2 [NC、L] 'code' 次のApacheエラーページを生成します。 Found 文書はここに移動しました。 [要求と同じリンク] さらに、ErrorDocumentを使用して要求を処理しようとしているときに、500 Internal Server Errorエラーが発生しました。 www.mysite.orgのApache/1.3.37サーバーポート80 – freeworlder

+0

うーん、 '$'が必要かどうか疑問です。 'RewriteRule ^([^ \ /] +)\ /?(。+)?$'これは最初の/の内容を与えるはずです。 –

+0

私はあなたの提案を試みました。今度はリダイレクトするようにRフラグを設定して、どこに行くのかを確認することができます。これはURLです(自分自身を補う): http://www.mysite.org/index.cgi?l=http:&a=/ www.mysite.org/ URL全体をテストしていますか? – freeworlder

関連する問題