0

次のようなすべてのリクエストをリダイレクトしたい:

/xml/doSomething?arg=value

に:

/xml.php?action=doSomething&arg=value

私はこの単純なルールを試しました:

RewriteEngine
RewriteBase /
RewriteRule ^xml/([^/]+)[/]? xml.php?action=$1 [R=302,L,QSA]

しかし、それは機能しません。はparamのみxml.phpで実行されます。arg=value問題はxml.php、私のルールの最初の部分として、という名前のファイルがあることです。実際、ルールを次のように変更すると、次のようになります。

RewriteRule ^asd/([^/]+)[/]? xml.php?action=$1 [R=302,L,QSA]

そして私は指摘します:

/asd/doSomething?arg=value

私は正しくリダイレ​​クトされます:

/xml.php?action=doSomething&arg=value

書き換えパターンの最初の部分として名前が付けられたPHPファイルの存在は、どのようにしてすべてを壊すことができますか?

4

1 に答える 1

0

解決しました。問題はOptions MultiViews、仮想ホスト構成にあったことです。このオプションについて知りませんでした:

MultiViews 検索は、 によって有効になりMultiViews Optionsます。サーバーが要求を受け取り、存在しない/some/dir/foo場合/some/dir/foo、サーバーはディレクトリを読み取り、名前が付けられたすべてのファイルを探します。foo.*

それは単に私のルールが機能しない理由を説明しています。

于 2012-07-11T07:44:03.760 に答える