そこで、現在 Apache (バージョン 2.4.9 です。興味があれば) で実行している Web アプリケーションの URL をクリーンアップするように依頼されましたが、mod re_write コマンドを数時間いじった後、ぐるぐる回っているように感じました。私がやろうとしていることは次のとおりです。
URLが次のような場合(http://www.foo.bar/admin/index.php)のように表示されます。http://www.foo.bar/admin
URLが次のような場合(http://www.foo.bar/admin/testpage.php)のように表示されます。http://www.foo.bar/admin/テストページ
URLが次のような場合(http://www.foo.bar/admin/testpage.php?id=15&foo=www)のように表示されます。http://www.foo.bar/admin/testpage?id=15&foo=www
これまでのところ、index.php はほぼ解決し、2 番目の例はときどき解決しています。基本的に、私が持っているコードは非常に不安定で、ファイル ツリーの 2 レベル下しか解決しません。そのため、誰かこの件について助けてくれる人はいないかと思っています。vhost ファイルには次の内容が含まれています (すべてのディレクトリに .htaccess ファイルとして保存したくなかったため)。
AllowOverride None
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
答え1
次のようなものが機能するはずです:
RewriteRule ([^/]+)/(.*)/?index.php$ $1
RewriteRule \.php $1
編集: 最初のルールは、よりわかりやすい次のルールに置き換えることができます。
RewriteRule (.*)/index\.php?$ $1
例:
URL =http://www.foo.bar/admin/index.php
一致したルール =RewriteRule ([^/]+)/(.*)/?index.php$ $1
結果 :http://www.foo.bar/admin
URL =http://www.foo.bar/admin/testpage.php
一致したルール =RewriteRule \.php $1
結果 =http://www.foo.bar/admin/testpage
URL =http://www.foo.bar/admin/testpage.php?id=15&foo=www
一致したルール =RewriteRule \.php $1
結果 =http://www.foo.bar/admin/testpage?id=15&foo=www