2013-04-09 95 views
1

我試圖創建mod_rewrite規則,該規則基於第一級目錄名稱進行重寫,並在沒有任何目錄名稱匹配的情況下將故障轉移重寫到標準文件。對特定目錄使用特定的PHP文件

實施例:

我有units.php,models.php和other.php。 other.php文件應處理所有未分配的請求。

http://www.mydomain.com/units/4435 應該重定向到/units.php?id=4435

http://www.mydomain.com/models/594 應該重定向到/models.php?id=594

http://www.mydomain.com/anything 應該重定向到/other.php?id=什麼

http://www.mydomain.com/anything/893 應該重定向到/other.php?id=anything/893

讓我知道這是否合理。我不確定如何構建規則和條件來實現我想要的。

這是我試過的東西。它適用於以「單位」或「模型」的網址,但我得到一個500錯誤,如果我嘗試任何其他網址:

RewriteEngine On 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(units)/(.+)$ /units.php?id=$2 [L,NC] 
RewriteRule ^(models)/(.+)$ /models.php?id=$2 [L,NC] 
RewriteRule ^(.+)$ /other.php?id=$2 [L,NC] 

回答

0

你可以試試這個:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(units|models)/([^/]+)/? [NC] 
RewriteRule .* /%1.php?id=%2       [L,NC] 

RewriteCond %{REQUEST_URI} !(units|models) [NC] 
RewriteCond %{REQUEST_URI} !other\.php  [NC] 
RewriteRule ^(.*) /other.php?id=$1 [L,NC] 

對於永久重定向,更換[L,NC]與[R = 301,L,NC]

0

我建議這樣的:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/(units|models)/([0-9]+)/?$ /$1.php?id=$2 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/(units|models)/[0-9]+/?$ 
RewriteRule ^/[^/]+/([0-9]+)/?$ /other.php?id=$1 [L,QSA] 
相關問題