了解.htaccess

时间:2011-05-09 20:44:04

标签: php apache .htaccess url-rewriting

我正在尝试使用.htaccess更改我的网址类型,但我遇到了一些问题。我尝试了一些在线工具,但它们甚至不适合我。所以这就是我要做的事情;

我有像http://mydomain.com/profile.php?u=newuser这样的网页,我想这样做:http://mydomain.com/newuser但到目前为止我无法实现它。

这也是我尝试过的;

Options +FollowSymLinks
RewriteEngine on

RewriteRule (.*) profile.php?u=$1

在.htaccess中进行更改后,我还需要对我的php文件进行任何更改吗?此外,当试图打开http://mydomain.com/newuser时,我注意到页面上的一些图像正在消失,这是什么原因?非常感谢你们!

2 个答案:

答案 0 :(得分:2)

这是因为您要将每个请求发送到profile.php(。*)。这将影响对图像,资源等的所有请求。

在规则上方添加此行以排除“真实​​”资源:

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

答案 1 :(得分:2)

你已经走得很远了,但现在你要将你域中的每个可能的URL重写为profile.php,包括像/images/logo.jpg这样的东西。

问题是,你想用这个做什么?一个简单的方法是改变它:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) profile.php?u=$1

添加的“RewriteCond”会导致重写引擎仅重写重写服务器上不存在的网址,因此您的图片会显示正常。

就我个人而言,我认为在您的所有个人资料网址中添加/个人资料/前缀可能会更好:

Options +FollowSymLinks
RewriteEngine on
RewriteRule profile/(.*) profile.php?u=$1

如果您需要,这将允许您将来添加新的重写规则;如果您的某个用户决定使用名为“profile.php”的用户名或其他与服务器上现有网址冲突的内容,也不会给您带来任何问题。