我正在尝试创建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]
答案 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]