我有以下htaccess规则
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)$ ?page=$1&action=$2 [L]
例如,如果我想添加内容或编辑某些内容,则网址将如下:
www.website.com/page_name/add
该规则适用于除一个名为portfolio的页面以外的所有页面..对于此页面,我首先要获取类别值,然后添加或编辑内容。
我根据第一条规则尝试了这条规则:
RewriteRule ^portfolio/([a-zA-Z-_0-9]+)$ ?page=portfolio&category=$1 [L]
获取类似的链接:
www.website.com/portfolio/demos
或者
www.website.com/portfolio/desings
但总是第一个有效的规则(将第二个参数视为一个动作,而不是一个类别)。
是否有任何想法让特定页面的异常处理像“猫”之类的东西,而不是像“动作”那样?
答案 0 :(得分:2)
HTACCESS中的L
标志告诉Apache在该规则之后忽略任何内容(如果模式匹配)(在您的示例中)。
交换规则:
RewriteRule ^portfolio/([a-zA-Z-_0-9]+)$ ?page=???&category=$1 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)$ ?page=$1&action=$2 [L]
另外,请注意,在第一个规则中,没有第二个参数(因为只有一个模式),所以我不确定您打算向用户发送的位置......
答案 1 :(得分:2)
首先从第一个规则中排除portifilio,然后替换此行:
RewriteCond %{REQUEST_URI} !^/portfolio
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)$ ?page=$1&action=$2 [L]
同样在这条规则中:
RewriteRule ^portfolio/([a-zA-Z-_0-9]+)$ ?page=$1&category=$2 [L]
您将能够匹配仅非页码的数字,它应该是这样的:
RewriteRule ^portfolio/([a-zA-Z-_0-9]+)$ ?page=portfolio&category=$1 [L]
OR
RewriteRule ^(whatever)/([a-zA-Z-_0-9]+)$ ?page=$1&category=$2 [L]