我想要(例如)
discuss/1/title/where-are-you
输出
discussPage.php?id=1&title=where-are-you
我在.htaccess
文件中有以下命令,该文件与discussPage.php
位于同一目录中:
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
# Input: discuss/ID/title/TITLE
# Output: discussPage.php?tid=NAME&title=TITLE
RewriteRule ^discuss/(\w+)/(\w+)/(\w+)/?$ discussPage.php?id=$1&title=$3
现在,当我尝试访问404
这样的网页时出现discuss/1/title/where-are-you
错误,即使discussPage.php?id=1&title=where-are-you works fine.
P.S。 mod_rewrite
已启用(我已将其用于其他目的)。
答案 0 :(得分:2)
你的问题是\ w与最后一位的“ - ”不匹配。
您可以使用更广泛的字符类[\w-]+
来简单地允许破折号。我会小心使用像[^/]
这样的解决方案,因为它们允许除了斜杠以外的任何东西,这是非常宽容的。白名单总是更安全,避免意外。
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
# Input: discuss/ID/title/TITLE
# Output: discussPage.php?tid=NAME&title=TITLE
RewriteRule ^discuss/(\w+)/(\w+)/([\w-]+)/?$ discussPage.php?id=$1&title=$3
请注意,-
必须是字符类中的最后一个,否则你应该将其转义,因为如果它在两个其他字符之间,则表现为范围,如[a-z]
。
答案 1 :(得分:-1)
要进行调试,您始终可以echo $_SERVER['QUERY_STRING'];
但我相信正确的代码会是这样的。
RewriteEngine on
RewriteBase /
RewriteRule ^discuss/([0-9]+)/title/([a-z0-9\-]+)?$ discussPage.php?id=$1&title=$2 [NC,QSA]
但是,您可能希望修复RewriteBase值。
另外 - 如上一个条件所示,where-are-you
部分中只能包含字母数字字符和连字符。 (但有些东西告诉我你不需要其他角色!)
答案 2 :(得分:-2)
适合我:
RewriteEngine On
RewriteBase /
RewriteRule ^discuss/([^/]+)/([^/]+)/([^/]+)/?$ discussPage.php?id=$1&title=$3 [R]