我想重写下面的网址(沿着其他一些网址;并非所有文件都在/app
文件夹中):
/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
在你对stackoverflow的大力帮助下,我走到了今天:
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
1条答案
按热度按时间wnvonmuf1#
对现有规则的一些意见:
/app/12345
可能是文件系统上的一个物理目录吗?文件系统检查相对昂贵,所以如果可能的话最好避免。至少它会导致不必要的代码膨胀。/app/login
到/app/login.php
。NC
标志。传入的URL是否真的应该是不同的大小写?同样,这可能会导致重复内容问题,因为/app/12345/process/789
和/APP/12345/PROCESS/789
是两个不同的URL。verfahrensverzeichnis
是什么?我需要最后一个重定向的规则:
这可以说是所有重写中最简单的一种,然而,目前您的最后一条规则会与此请求冲突,并最终将请求重写为
app/start.php?contract_id=login
。因此,您需要将此规则放在第一位,或者限制正则表达式,使其只匹配数字ID,如我上面提到的那样(更可取),这自然会避免这种冲突。因此,考虑到以上几点,您的规则变为: