mod_rewrite 規則應用不一致的問題

mod_rewrite 規則應用不一致的問題

因此,我被要求清理我們目前在 apache 上運行的 Web 應用程式的 URL(如果有興趣的話,版本 2.4.9),但是在使用 mod re_write 命令幾個小時後,我想我'我在原地轉圈。這就是我正在嘗試做的事情。

如果網址是這樣的(http://www.foo.bar/admin/index.php),讓它顯示為http://www.foo.bar/admin

如果網址是這樣的(http://www.foo.bar/admin/testpage.php),讓它顯示為http://www.foo.bar/admin/testpage

如果網址是這樣的(http://www.foo.bar/admin/testpage.php?id=15&foo=www),讓它顯示為http://www.foo.bar/admin/testpage?id=15&foo=www

到目前為止,我已經找到了 index.php 解析的地方......大部分......而第二個範例解析......有時。基本上,我的程式碼看起來非常不穩定,並且只解析檔案樹中的兩個層級。所以我想知道這裡是否有人可以幫我解決這個問題?這是我在 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

例如:

網址 =http://www.foo.bar/admin/index.php

匹配規則 =RewriteRule ([^/]+)/(.*)/?index.php$ $1

結果 :http://www.foo.bar/admin


網址 =http://www.foo.bar/admin/testpage.php

匹配規則 =RewriteRule \.php $1

結果=http://www.foo.bar/admin/testpage


網址 =http://www.foo.bar/admin/testpage.php?id=15&foo=www

匹配規則 =RewriteRule \.php $1

結果=http://www.foo.bar/admin/testpage?id=15&foo=www

相關內容