将特定PHP文件用于特定目录

时间:2013-04-09 01:27:54

标签: apache .htaccess mod-rewrite

我正在尝试创建mod_rewrite规则,这些规则根据第一级目录名称重写,并在没有目录名称匹配的情况下重写为标准文件。

示例:

我有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=anything

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]

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]