Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Apache .htaccess url未正确重定向_Apache_Web - Fatal编程技术网

Apache .htaccess url未正确重定向

Apache .htaccess url未正确重定向,apache,web,Apache,Web,我的网站(foo.com/blog)上有一个blog子目录,我正在学习一个教程,该教程提供了一个关于虚荣URL的简要说明 基本上,我正在尝试获取它,以便当用户导航到'foo.com/blog/xyz'时,'xyz'变量(用户名)将用户重定向到: foo.com/blog/profile.php?username=xyz 但仍显示为: foo.com/blog/xyz 教程中的代码不起作用,所以我一直依赖于它下面youtube评论中的代码: RewriteBase / RewriteEng

我的网站(foo.com/blog)上有一个blog子目录,我正在学习一个教程,该教程提供了一个关于虚荣URL的简要说明

基本上,我正在尝试获取它,以便当用户导航到'foo.com/blog/xyz'时,'xyz'变量(用户名)将用户重定向到:

foo.com/blog/profile.php?username=xyz 
但仍显示为:

foo.com/blog/xyz
教程中的代码不起作用,所以我一直依赖于它下面youtube评论中的代码:

RewriteBase /

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://www.foo.com/blog/profile.php?username=$1 [NC]
问题是,当我尝试导航到'foo.com/blog/xyz'时,它会重定向到:

foo.com/blog/profile.php?username=blog/xyz
很明显,用户名被设置为blog/xyz,而不是xyz本身

同样,如果导航到foo.com/xyz,它会重定向到它应该去的地方:

http://www.foo.com/blog/profile.php?username=xyz
但按原样显示此url,而不是显示为foo.com/blog/xyz(就像reddit如何显示为用户的reddit.com/u/username)

看来我有两个问题:

  • 1)我不知道如何使它只在我导航到foo.com/blog/xyz而不是foo.com/xyz时进行重写(htaccess在public\u html中--我尝试将它移动到public\u html/blog,但没有成功)

  • 2)我不知道如何让它显示为blog/xyz而不是blog/profile?php?username=xyz


我对apache了解不多,我真的只需要把这段代码做好,这样我就可以在本教程的其余部分继续把头撞到墙上。有人知道我做错了什么吗?

好吧,您在规则集中从未提到过如何处理请求路径的
/bog
部分。做吧

我还清理了您发布的代码中的一些其他问题,这些问题将阻止它像您声称的那样工作



还有一个一般提示:您应该始终希望将此类规则放置在http服务器(虚拟)主机配置中,而不是使用动态配置文件(
.htaccess
样式文件)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦),才提供它们作为最后一个选项.

你为什么不参考你使用的工具的文档,而不是依赖一些博客文章或youtube视频?代码很有用,谢谢!不幸的是,我现在对免费托管很差劲(这是在中国访问我的网站而不会再次被骗的唯一方法)——但我会在将来记住这一点。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?blog/(.*)$ /blog/profile.php?username=$1 [L]