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中的Mod重写_Php_.htaccess_Mod Rewrite - Fatal编程技术网

PHP中的Mod重写

PHP中的Mod重写,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,这是我博客页面的url www.mysite.com/blog/?id=1 www.mysite.com/blog/?id=2 www.mysite.com/blog/?id=3 但我想让我的url看起来像 www.mysite.com/blog/1 www.mysite.com/blog/2 www.mysite.com/blog/3 我在.htaccess中使用了以下重写 但是我的系统中出现了404错误 我犯了什么错误?我该如何纠正 RewriteEngine On RewriteRul

这是我博客页面的url

www.mysite.com/blog/?id=1
www.mysite.com/blog/?id=2
www.mysite.com/blog/?id=3
但我想让我的url看起来像

www.mysite.com/blog/1
www.mysite.com/blog/2
www.mysite.com/blog/3
我在
.htaccess
中使用了以下重写

但是我的系统中出现了404错误

我犯了什么错误?我该如何纠正

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ blog/?id=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ blog/?id=$1

去年我花了将近两天的时间来追求这个

许多Linux发行版(至少基于Debian)通过在默认配置文件中声明
AllowOverride None
来阻止您使用.htaccess文件覆盖Apache配置文件

您可以通过编辑
/etc/apache2/sites available/000 default将行更改为
AllowOverride All

希望这有帮助。

首先检查apache上是否启用了mod_rewrite:

然后将以下内容添加到.htaccess文件中

RewriteEngine On
RewriteRule ^/?blog/([a-zA-Z0-9_-]+)/$ /blog?id=$1 [L]
另外,请检查apache中该模块的目录中是否给出了AllowOverride All。 以下链接可能很有用:


我的英语不好,但在这里我可以试着回答

看起来你的博客在一个子目录上。 所以

重写规则^blog/([^/]*)$/blog/?id=$1[L]

并尝试添加

重写基/

如果你还有问题, 也。。 有许多用于htaccess的生成器 例如

这被称为
Pretty-URL的
SEO-Friendly-URL
,这可以通过几种方式实现

一种方法是自己做所有事情,并修改.htaccess使其看起来像这样:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1

RewriteRule ^search/(.*)$ ./search.php?query=$1
请注意,这要求您的Web服务器是Apache

其他方法(实际上工作原理大致相同)是使用PHP框架,这些框架通常实现了带有漂亮URL的路由,因此您不必重新发明轮子

这是Laravel创建路由和漂亮url的方法:

Route::get('/blog/{id}', function() {
    // Do something
}); 
看看拉威尔:。我真的很喜欢这个框架及其特性

默认情况下,RubyonRails也实现了这一点。但是我假设您没有使用它,因为您正在编写PHP

有关如何在PHP中创建漂亮URL的良好教程,请参阅TutsPlus提供的本教程:


希望我能帮助你!祝你好运。

$1
可能是blog/1之类的东西。请尝试
RewriteRule^blog/([0-9]+)$blog/?id=$1
“不工作”并不意味着什么。你到底在做什么,你期望的结果是什么,你得到的结果是什么?您已经向我们展示了一段代码,但您没有明确说明您到底在做什么来“测试”这个。瞧,您的htaccess很好!来源:htaccess.madewithlove.be“notworking”在这里的意思是。“找不到对象”->每个程序员都知道。“找不到对象”?那是从哪里来的?网络服务器?你的系统?你看过错误日志了吗?细节,伙计,细节!但是,我必须单独在一个文件夹中完成。你在服务器上有管理员权限吗?现在,我在系统中完成。对不起!我犯了一个严重的错误!全局配置中的AllowOverride All将实现此目的。-这将允许.htaccess文件工作。请记住在此期间重新加载或重新启动Apache。我正在尝试生成it.net。谢谢您的回答。