我正在使用htaccess管理友好网址
我友好的网址如下:
www.example.com/p/12345/John-Smith
12345是ID号,/ p /没有改变,名称是友好URL的无关位。我的背景网址如下:
www.example.com/page.php?id=12345
我的htaccess看起来像这样:
Options +FollowSymlinks
RewriteEngine on
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^p/([0-9]+)/([^/\.]+)?$ details.php?id=$1 [L]
一切都像魅力一样。
然而,我真正希望我的htaccess看起来像是在下面。唯一不同的是^(。*)/ p /与^ p相对。
Options +FollowSymlinks
RewriteEngine on
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^(.*)/p/([0-9]+)/([^/\.]+)?$ page.php?id=$1 [L]
基本上,我想确保只有url中的/ p /目录触发了这个特定的htaccess规则,而不是无意的,例如example.com/gdp/12345/abc
对于我的生活,我无法弄清楚为什么这不起作用!
一如既往地感谢您。
答案 0 :(得分:0)
您的规则RewriteRule ^(.*)/p/([0-9]+)/([^/\.]+)?$ page.php?id=$1 [L]
存在一些问题。
/p/
之前的内容,因此$ 1将反向引用该内容,而不是ID。^(.*)/p/
永远不会匹配http://www.example.com/p/1234之类的内容,因为传递给规则的URI是p/1234
。要处理1和2,您需要将反向引用更改为 $ 2 ,并使用正则表达式来容纳p/1234
URI:
RewriteRule (^|/)p/([0-9]+)/([^/\.]+)?$ page.php?id=$2 [L]
(^|/)
表示它是URI的开头(p/1234
)或者是斜杠(/something/p/1234
)。