Php 使用.htaccess重写URL
我正在尝试像这样转换URLPhp 使用.htaccess重写URL,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我正在尝试像这样转换URLhttp://example.com/page.php?user=x&post=x进入 http://example.com/blogs/user/post 这是我到目前为止的代码,不确定我是否遗漏了什么或做了什么错误,因为到目前为止还没有成功 RewriteEngine On RewriteRule ^blogs/([a-z0-9\-]+)/([0-9]{1,11})/$ page.php?user=$1&post=$2 [L] EDIT:在进行一些修改后,
http://example.com/page.php?user=x&post=x
进入
http://example.com/blogs/user/post
这是我到目前为止的代码,不确定我是否遗漏了什么或做了什么错误,因为到目前为止还没有成功
RewriteEngine On
RewriteRule ^blogs/([a-z0-9\-]+)/([0-9]{1,11})/$ page.php?user=$1&post=$2 [L]
EDIT:在进行一些修改后,它现在返回一个错误404错误,表示未找到page.php
。我肯定文件在那里
第二次编辑:解决了404问题
post
参数也是可选的。用户可以混合使用a-z0-9(无字符限制)
post
只能为0-9,长度最多为11个字符根据,这应该可以工作:
RewriteEngine On
RewriteRule ^blogs/([a-z0-9-]+)/([0-9]+)$ /page.php?user=$1&post=$2 [L]
这将转换http://example.com/blogs/abc_123/67890
至http://example.com/page.php?user=abc_123&post=67890
最值得注意的变化是,显然在规则的第一个组件中不能有一个前导的/
,但我也删除了post ID上的{11}
约束,因为这不太可能达到预期效果。试试看
RewriteRule ^blogs/?([a-z0-9]*)?/?$ page.php?user=$1&post=$2 [NC,L]
?
表示匹配是可选的。因此,对于/?
而言,斜杠是可选的
对于^blogs/?
([a-z0-9]*)?
如果从上面删除?
和*
使其变成这样:
RewriteRule ^blogs/?([a-z0-9])/?$ page.php?user=$1&post=$2 [NC,L]
用户
将不再是可选的,必须完全匹配。
示例<代码>http://blogs/John
;
如果将+
替换为*,如下所示:
RewriteRule ^blogs/?([a-z0-9]+)/?$ page.php?user=$1&post=$2 [NC,L]
RewriteRule ^blogs/?([a-z0-9]*)/?$ page.php?user=$1&post=$2 [NC,L]
用户
需要至少匹配一个字符。例如:http://blogs/J
如果你把星号放在下面:
RewriteRule ^blogs/?([a-z0-9]+)/?$ page.php?user=$1&post=$2 [NC,L]
RewriteRule ^blogs/?([a-z0-9]*)/?$ page.php?user=$1&post=$2 [NC,L]
它可以匹配到零长度。例如:http://blogs/
。几乎像是可选的
如果匹配失败,您将得到
404未找到错误此代码提供了所需的结果
RewriteRule ^blogs/([a-z0-9]+)?/?$ page.php?user=$1 [NC,L]
RewriteRule ^blogs/([a-z0-9]+)?/?([0-9]+)?/?$ page.php?user=$1&post=$2 [NC,L]
正如Fraxtil指出的那样,我还修改了post ID约束。你有什么问题?还有,为什么不试试看它是否有效?@Brad抱歉,我在帖子中犯了一个错误。我已经测试了当前的代码,它不工作。到底是什么不工作?这场比赛没有你想象的那么成功?数据没有被传递?@Brad服务器返回一个404页面未找到。您要求在模式中使用尾随斜杠,但在您显示的示例URL中没有。而且{11}
最多不超过11个字符,确切地说是11个。你能解释一下为什么吗?为什么是什么意思?想详细说明一下吗?它是如何工作的?为什么这比其他解决方案好?我不太明白你的意思。但我不认为这比其他解决方案好。这取决于你想要什么,但我使用*来匹配零长度。很明显,系统将你的帖子放入自动低质量队列,因为它太短了。我同意它太短了。添加更多内容。