我的网站上有一个博客子目录(foo.com/blog),我正在按照教程提供虚荣网址的简要说明。
基本上,我试图获取它,以便当用户导航到&f; foo.com/blog/xyz' ' xyz'变量(用户名)将用户重定向到:
foo.com/blog/profile.php?username=xyz
但仍显示为:
foo.com/blog/xyz
教程中的代码不起作用,所以我一直依赖于ittube评论中的代码:
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]
问题是,当我尝试导航到&f; 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
但是显示此网址而不是显示为foo.com/blog/xyz(就像reddit如何显示为用户的reddit.com/u/username)
所以看来我有两个问题:
1)我无法弄清楚如何制作它,以便只在我导航到foo.com/blog/xyz而不是foo.com时进行重写/ xyz(.htaccess在public_html中 - 我试过把它移到public_html / blog但它没有用)
2)我无法弄清楚如何将其显示为blog / xyz而不是blog / profile?php?username = xyz
我不太了解apache,我真的只需要将这一段代码放在正确的位置,这样我就可以继续用本教程的其余部分来抨击我的头了。有谁知道我做错了什么?
答案 0 :(得分:0)
好吧,您从未在规则集中提到过如何处理请求路径的/bog
部分。 做到了......
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?blog/(.*)$ /blog/profile.php?username=$1 [L]
我还清除了您发布的代码中的一些其他问题,这会阻止它在您声称 时起作用。
一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess
样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。