因此,我被要求清理我們目前在 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