我试图使用我的.htaccess传递id和模式。目前它传递了一个id,看起来像这样:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .*/([0-9]+)/?$
RewriteRule .* /listing.php?id=%1 [L,QSA]
链接如下所示:
http://www.drlistings.com/villas/stunning_180_degree_ocean_view/4074/
我想添加一个模式,例如:
http://www.drlistings.com/villas/stunning_180_degree_ocean_view/4074/inline
传递
listing.php?id=%1&mode=%2
我已经检查了其他发布的问题,但他们似乎比我正在做的事情复杂得多。第二个参数不必是数字,但如果它更容易做数字,我可以使用它。它可以在id参数之前或之后,我是灵活的,例如:
http://www.drlistings.com/villas/stunning_180_degree_ocean_view/inline/4074/
或如果它是数字,那将是0/1标志情况:
http://www.drlistings.com/villas/stunning_180_degree_ocean_view/0/4074/
谢谢!
答案 0 :(得分:1)
您的初始规则可能应该简化为处理RewriteRule
而不是RewriteCond
中的匹配,因为这将是更常规的用法。只是为了纠正您现有的规则,请使用
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Match the number in $1 from the RewriteRule's left side
RewriteRule ^.+/([0-9]+)$ /listing.php?id=$1 [L,QSA]
要选择性地将模式作为id后面的字母数字字符串接受,您可以添加一个非捕获组(?:)
,其中嵌套了常规捕获组,这将将模式填充到$2
中。通过?
结束整个事物是可选的。然后将/?
附加到末尾,允许可选的尾随/
。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]+/([0-9]+)(?:/([a-z0-9]+))?/?$ /listing.php?id=$1&mode=$2 [L,QSA]
打破它:
^[^/]+
匹配字符串的开头,直到第一个/
([0-9]+)
将数字ID捕获到$1
(?: )?
是一个非结束?
可选的非捕获组,需要允许可能缺少模式([a-z0-9]+)
将字母数字模式与$2
/?
可选的尾部斜杠$
字符串的结尾。