htaccess/mod_write规则优化:补全/app/login重写规则需求
URL重写规则补充方案
需要实现的URL重写映射:
/app/12345/process/789 => /app/process.php?contract_id=12345&id=789 /app/12345/login => /app/login.php?contract_id=12345 /app/12345/settings => /app/settings.php?contract_id=12345 /app/12345/tags => /app/tags.php?contract_id=12345 /app/12345 => /app/start.php?contract_id=12345 /app/login => /app/login.php
已完成的重写规则:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/process/([^/]+)/?$ app/process.php?contract_id=$1&id=$2 [L,NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/(login|settings|tags)/?$ verfahrensverzeichnis/$2.php?contract_id=$1 [L,NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/?$ app/start.php?contract_id=$1 [L,NC,QSA]
补充最后一条规则
需要把/app/login重写到/app/login.php的规则放在所有规则最前面,否则会被第二条规则错误拦截,将login识别为contract_id。补充后的完整规则如下:
# 补充的/app/login重写规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/login/?$ app/login.php [L,NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/process/([^/]+)/?$ app/process.php?contract_id=$1&id=$2 [L,NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/(login|settings|tags)/?$ verfahrensverzeichnis/$2.php?contract_id=$1 [L,NC,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app/([^/]+)/?$ app/start.php?contract_id=$1 [L,NC,QSA]
规则说明
^app/login/?$:匹配/app/login和带末尾斜杠的/app/login/两种格式[L,NC,QSA]:L表示匹配后终止后续规则解析;NC表示忽略URL大小写;QSA表示保留原URL携带的查询参数
内容的提问来源于stack exchange,提问作者Phantom
相关产品推荐
相关产品推荐

