在htaccess

时间:2018-03-13 16:48:29

标签: php .htaccess

我有以下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

但总是第一个有效的规则(将第二个参数视为一个动作,而不是一个类别)。

是否有任何想法让特定页面的异常处理像“猫”之类的东西,而不是像“动作”那样?

2 个答案:

答案 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]