如何为这些案例创建一个通用的RewriteRule?

时间:2016-10-11 22:57:59

标签: apache .htaccess mod-rewrite

我有很多规则,结构如下。 有没有办法只有一个能满足所有这些情况?

RewriteRule ^ecology/?$ /content.php?slug=ecology [NC,L]
RewriteRule ^vraveia/?$ /content.php?slug=vraveia [NC,L]
RewriteRule ^bonus/?$ /content.php?slug=bonus [NC,L]

我试过

RewriteRule ^(.+)/?$ /content.php?slug=$1 [NC,L]

没有运气

2 个答案:

答案 0 :(得分:0)

使用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/?$ /content.php?slug=$1 [NC,L]

这样,您可以避免重写现有文件或目录

使用-f测试文件,使用-d测试目录。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond

答案 1 :(得分:0)

假设最终URL中包含尾部斜杠是您的问题,请尝试使捕获非贪婪:

RewriteRule ^(.+?)/?$ /content.php?slug=$1 [NC,L]

如果您只想匹配一个级别(例如ecology/但不匹配ecology/one/two/),请使用:

RewriteRule ^([^/]+?)/?$ /content.php?slug=$1 [NC,L]