mod_rewrite:if / else键入RewriteRule

时间:2009-09-25 18:52:04

标签: wordpress .htaccess mod-rewrite

以下重写将以数字4开头的字符串作为变量传递给process.php:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(4[^/]*)$ /process.php?variable=$1 [L]

所以这个

http://www.domain.com/4shopping

映射到

http://www.domain.com/process.php?variable=4shopping

但我想将最后一次重写规则扩展为基本状态:

if word begins with 4, map to /process.php?variable=$1
else map to /index.php

此语句的第二个(else)部分是基本的WordPress重写规则。例如:

http://www.domain.com/shopping
没有4的

将被引导至

http://www.domain.com/index.php?shopping (I believe this is how WordPress permalinks work!)

3 个答案:

答案 0 :(得分:3)

试试这个:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^(4[^/]*)$ process.php?variable=$1 [L]
RewriteRule ^([^4/][^/]*)$ index.php?$1 [L]

第一条规则将捕获任何可以映射到现有文件或目录的请求,并将结束重写过程。第二个规则是你的(没有RewriteCond条件)。第三条规则将捕获任何URL路径不以数字4开头的请求。

答案 1 :(得分:3)

以下是解决方案:

RewriteRule ^(4[^/]*)$ /feedback.php?sms_code=$1 [L]
#
# BEGIN wordpress
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END wordpress

我保留了默认的Wordpress规则,并在上面添加了我自己的条件规则,确保在满足条件时终止[L]处理

答案 2 :(得分:0)

我会在你已经拥有的东西的末尾添加两行。附加规则将转换为index.php尚未转换为process.php的任何内容。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(4[^/]*)$ /process.php?variable=$1 [L]

RewriteCond %{SCRIPT_FILENAME} !process\.php
RewriteRule ^([^/]*)$ index.php?$1