首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在.htaccess中创建异常

如何在.htaccess中创建异常
EN

Stack Overflow用户
提问于 2017-04-15 16:24:50
回答 1查看 840关注 0票数 1

我想使用友好的urls:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteRule ^([A-Za-z0-9_-]+)/$ pages/$1.php [QSA,L]

但同时,我希望/forum/folder被排除在.htaccess文件中的规则之外。

我怎么能这么做?

EN

回答 1

Stack Overflow用户

发布于 2017-04-15 17:01:57

RewriteRule ^(A-Za-Z0-9-+)/$ pages/$1.php QSA,L ..。我希望/forum/folder被排除在外

你的RewriteRule模式(即。^([A-Za-z0-9_-]+)/$)已经排除了URL-path /forum/folder,因为模式不允许在URL-path中间使用斜杠(目录分隔符);只有在结束时。

所以,如果/forum/folder还在被路由,那么其他的东西也在这样做。如果这个子目录中有一个额外的.htaccess (假设它是一个物理目录)使用mod_rewrite,那么您可能会遇到冲突。

否则,有几种方法可以例外:

#1 -排除所有文件和文件夹:,如果您特别希望不重写所有文件和文件夹(假设/forum/folder是物理目录),那么您可以专门检查这一点,并且只有当URL路径没有映射到文件或目录时才能处理RewriteRule。例如:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/$ pages/$1.php [L]

这里不需要QSA标志,因为请求中的查询字符串默认是追加的。只有在替换中指定查询字符串,并且需要将其与请求中的查询字符串合并时,才需要此标志。正如Deadooshka在注释中提到的,\w[A-Za-z0-9_]的一个简短的手动字符,因此这稍微简化了正则表达式。

#2 -排除规则:在文件开始时使用与要排除的路径匹配的规则,并简单地停止处理。例如:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteRule ^forum/folder - [L]

如果请求的URL以/forum/folder开头,那么就在这里停止,不再处理进一步的规则。

#3 -否定条件:在规则本身中包含一个否定的条件(RewriteCond指令)。例如:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteCond %{REQUEST_URI} !^/forum/folder
RewriteRule ^([\w-]+)/$ pages/$1.php [L]

只有当请求的RewriteRule不以/forum/folder开头时,这才会处理/forum/folder!前缀在CondPattern上否定正则表达式。

#4 -模式中的负查找:如果您只有一个规则和一个要从该规则中排除的URL,那么可以在RewriteRule模式(regex)中使用一个负前瞻性。例如,若要排除上述指令中的URL /forum,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
RewriteRule ^((?!forum)[\w-]+)/$ pages/$1.php [L]

(?!forum)是负前瞻。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43428416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档