Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用.htaccess重写URL_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php 使用.htaccess重写URL

Php 使用.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:在进行一些修改后,

我正在尝试像这样转换URL
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个。你能解释一下为什么吗?为什么是什么意思?想详细说明一下吗?它是如何工作的?为什么这比其他解决方案好?我不太明白你的意思。但我不认为这比其他解决方案好。这取决于你想要什么,但我使用*来匹配零长度。很明显,系统将你的帖子放入自动低质量队列,因为它太短了。我同意它太短了。添加更多内容。