URL重写不能正常使用.htaccess

时间:2015-10-06 02:34:48

标签: php apache .htaccess url-rewriting

我已在实时服务器上实现了我的小网站,但是我想使用url-rewrite来获取一些链接以使其干净。我在我的localhost服务器上试试这个:

http://localhost/cb/2/login.phphttp://localhost/cb/2/login

我设法通过编辑apache的httpd.conf并启用url-rewrite使其在我的localhost服务器上运行。这是我添加到apache的规则:

<IfModule mod_rewrite.c>  
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^/cb/2/login$ /cb/2/login.php   
</IfModule>

但是,当我将文件上传到实时服务器时,显然我没有权限编辑该服务器的httpd.conf,因此我只将重写规则放在.htaccess文件上,此处为&#39 ;它的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/login$ /login.php [L,QSA,NC]

但是当我尝试测试时,404 not found是服务器的响应。我也尝试在我的localhost服务器上实现,假设我无法编辑apache配置并发生同样的错误,Object not found!

我不知道接下来我会做什么。我是这个网址重写规则的新手,所以我们非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:0)

请尝试:

Options All -Indexes
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /index.php

答案 1 :(得分:0)

<强>更新

经过与OP的长时间讨论后,似乎幕后还有很多事情要发生。

最终结果是无论.htaccess文件中放置什么......它都不起作用。

建议OP与网站主持人联系,但我会将以下原始答案留给网站上的其他人。

从重写规则中删除正斜杠

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^cb/2/login$ cb/2/login.php [L,QSA,NC]

当您将其放在实时服务器上时,您更改了localhost上使用的重写规则。假设您的目录结构相同,您应该保持重写规则相同(减去正斜杠)。

请记住重写规则......

1)^$之间的文字是访问者在网址栏中输入的内容,是您的链接,也是访问者在网址栏中看到的内容。

2)下一个块是实际文件所在的位置。

快乐的编码!

<强>更新

如果您希望访问者转到www.examplewebsite.com/login.php,并且您希望网址看起来像www.example.com/login ...那么您的重写规则就是......

RewriteRule    ^login$    login.php    [L,QSA,NC]    # Handle log-in

现在......让我们说你的login.php位于另一个名为admin的目录...

RewriteRule    ^login$    admin/login.php    [L,QSA,NC]    # Handle log-in

这两行意味着......

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

如果网址不是“真实”目录或网址不是“真实”文件...则处理规则。

这就是为什么使用RewriteRule ^login$ index.php会导致您的网址被重写为www.examplesite.com/login.php,因为无法处理重写规则(无法找到index.php),但是login.php是一个“真实”文件....所以它就是它。