如何通过.htaccess限制RewriteRule仅作用于当前目录?
老哥,你找的方向完全对!用Apache的.htaccess确实能搞定这种tags下的动态URL路由。我把你没写完的配置补全,再给你掰扯清楚每部分的作用,保证你能直接用:
RewriteEngine On # 跳过真实存在的文件和目录,防止静态资源(比如图片、CSS)被错误重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 匹配tags/后的动态路径,传递给index.php的t参数 RewriteRule ^tags/(.*)$ index.php?t=$1 [QSA,L]
规则拆解说明:
RewriteEngine On:必须开启的重写引擎开关,没有它所有规则都无效RewriteCond %{REQUEST_FILENAME} !-f:如果用户请求的是真实存在的文件(比如tags/logo.png),就跳过这条重写规则,保证静态资源正常访问RewriteCond %{REQUEST_FILENAME} !-d:同理,如果请求的是真实存在的目录,也跳过规则RewriteRule ^tags/(.*)$ index.php?t=$1 [QSA,L]:^tags/(.*)$:精准匹配以tags/开头的URL,(.*)会把tags/后面的所有内容(比如my-dinamic-url、another-example)都捕获下来index.php?t=$1:把捕获到的动态内容作为t参数传递给根目录的index.php,这样你就能在PHP里用$_GET['t']拿到这个动态值了[QSA]:保留原URL里的查询字符串,比如用户访问website.com/tags/my-tag?foo=bar,会自动转成index.php?t=my-tag&foo=bar[L]:标记这是最后一条规则,匹配成功后就不再处理后面的其他规则,避免冲突
额外注意事项:
- 确保你的Apache服务器已经开启了
mod_rewrite模块,要是没开的话得先在服务器配置里启用它 - 这个.htaccess文件要放在网站的根目录下(和你的tags文件夹同级的位置)
- 如果你的index.php不在根目录,记得调整规则里的路径,比如在
public文件夹下的话就写成public/index.php?t=$1
内容的提问来源于stack exchange,提问作者wrkman
相关产品推荐
相关产品推荐

