正则表达式 slug 在另一个词之前
Posted
技术标签:
【中文标题】正则表达式 slug 在另一个词之前【英文标题】:Regular expression slug before another word 【发布时间】:2018-11-01 03:59:37 【问题描述】:我正在制作一个作家的网站,我想展示一些书籍,然后是一些摘录。
我希望 URL 看起来像这样: site.com/book/书名 site.com/book/name-of-book/excerpt
我设法用这个 htacess 完成了第一部分:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %SCRIPT_FILENAME !-d
RewriteCond %SCRIPT_FILENAME !-f
# Remove .php from regular pages
RewriteRule ^([^\.]+)$ $1.php [NC,L]
# Directory style books
RewriteRule ^book/(.*)$ ./book.php?slug=$1
# Directory style books excerpts
RewriteRule ^book/(.*)/excerpt$ ./book-excerpt.php?slug=$1
我的问题是第二部分,因为它不起作用,加载了 book.php
,而不是 book-excerpt.php
。
我一直在研究如何做到这一点,但整个网络上的所有解决方案似乎都不适合我。我究竟做错了什么? 第一条规则是否凌驾于第二条之上?我该如何解决这个问题?
【问题讨论】:
而“它不工作”意味着什么?你有错误吗?哪一个?客户端挂了?多久?你收到一个虚假的答案吗?哪一个?宇宙会内爆吗?我们无法猜测,您需要告诉我们。 问题很可能是处理顺序:因为最后一个规则 always 匹配,所以不可能应用最后一个规则。改变他们的顺序! @arkascha 添加了一些细节。正如你所说,我尝试改变顺序,但结果是一样的。 @arkascha 第一条规则遵循与最后一条相同的理想。通过将所有规则 1-2-3 交换为 3-2-1,我可以使它起作用。 【参考方案1】:由于规则相互覆盖,因此将所有规则(1-2-3 到 3-2-1)交换即可。
Options +FollowSymLinks
RewriteEngine On
RewriteCond %SCRIPT_FILENAME !-d
RewriteCond %SCRIPT_FILENAME !-f
# Directory style books excerpts
RewriteRule ^book/(.*)/excerpt$ ./book-excerpt.php?slug=$1
# Directory style books
RewriteRule ^book/(.*)$ ./book.php?slug=$1
# Remove .php from regular pages
RewriteRule ^([^\.]+)$ $1.php [NC,L]
【讨论】:
以上是关于正则表达式 slug 在另一个词之前的主要内容,如果未能解决你的问题,请参考以下文章