如何使用.htaccess文件重定向URL?

时间:2017-11-02 19:25:29

标签: php .htaccess redirect directory root

我的网站有一个库/目录路径,如:

{根} /页/ {文件} .PHP

我的index.php路径如下:{root} /index.php

我想,当人们去(例如)'login.php'(存在于/ pages目录中时,url不包含'/ pages'。

所以:

www.website.com/pages/dashboard.php

重定向到

wwww.website.com/dashboard.php

当人们访问www.website.com/dashboard.php时,他们可以访问此页面。

对不好的解释,找不到好的话。

编辑:现在是我的.htacces

RewriteEngine on

# Rewrite automatic to /index.
RewriteCond %{REQUEST_URI} ^/$

# Second check for if above doesn't do the job [www/https].
RewriteCond %{REQUEST_URI} !^/index [NC]
RewriteRule ^$ /index [R=301,L]

# Delete all the .php and .html extensions from files [url-related].
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

# Prevent people for looking inside the .htacces file.
<Files .htaccess>
    order allow,deny
    deny from all
</Files>

我确实试过这个: RewriteRule ^ /?pages /(.*)$ / $ 1 [R = 301,L]

(这确实重定向了我,但仍然收到了404错误。

1 个答案:

答案 0 :(得分:0)

我怀疑你只能用.htaccess做到这一点。 (编辑:你可以,见下面的“编辑”)

你想要的是PRETEND,login.php在根目录中,但实际上并非如此。

编辑:我想我把它搞混了。你只能用.htaccess文件来做。但我不推荐它。您必须每手添加所有重定向(或为不同的情况开发表达式) 相反,我建议使用以下技术。它基本上是一个自制的内容管理系统的开始,用户可以自己创建页面并命名通向此页面的URL。此外,这一切都可以扩展到支持ajax的网站,以确保最新!

仅使用.htaccess

如果您对控制器技术的命名优势不感兴趣,请替换.htaccess文件中的代码,并解决登录页面问题。

RewriteEngine on
#catch www.example.com/login.php and redirect without user's conciousness to www.example.com/pages/login.php
RewriteRule ^(login.php)$ http://www.example.com/pages/login.php [NC,L,QSA]
# Prevent people from looking inside the .htacces file.
<Files .htaccess>
    order allow,deny
    deny from all
</Files>

如果您想获得更多(实际上是有用的)知识并希望学习如何启动具有指定优势的CMS的通用技术,请继续阅读!

此示例的目标

当用户调用URL“www.example.com/login”时,将加载登录页面(“login.php”)。

设置

根目录中需要.htaccess文件 你需要在根目录中有一个“控制器”(我建议使用index.php) 你需要在某个地方使用内容页面,在本例中是root / pages中名为“login.php”的文件 Htaccess会将所有URL重定向到此控制器,同时它也会传递用户最初调用的URL。根据传递的URL,控制器决定加载哪个页面内容。在我们的例子中,它将是login.php。

控制器

路径:root / index.php

<?php

    function callPage($data) {
        if (isset($data['path'])) {
            // get the correct file for the given path
              switch ($data['path']) {
                  case "login":
                      include("/pages/login.php");
                      break;
                  default:
                      // show 404 error if given path is unknown
                      include("/pages/error.php");
              }
        }
    }

?>

<html>
    <head></head>
    <body>
        <div id="page"><?php callPage($_GET); ?><!-- load called page's content --></div>
    </body>
</html>

示例内容页面

路径:root / pages / login.php

<p>I am a happy login page. See, that I don't need any HTML Tags, a body or a head, because I am meant to be used only when mother index.php calls me up and integrates me. Life's so easy!</p>
<p>And do you know what's the best? I can even run PHP inside myself! Awesome, isn't it?</p>

htaccess的文件

路径:root / .htaccess

RewriteEngine on
#if called file or directory reallyexists, don't redirect (might lead into a loop)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#redirect every URL (that does not really exist) to index.php
#the URL the user called can be accessed in index.php in $_GET['path']
RewriteRule ^(.*)$ http://www.exampe.com/index.php?path=$1 [NC,L,QSA]

# Prevent people from looking inside the .htacces file.
<Files .htaccess>
    order allow,deny
    deny from all
</Files>

脉冲

这当然是一个非常基本的例子。目前,使用这种技术而不是.htaccess文件中的简单重定向没有优势,而只是缺点。但现在你可以自己来加强它。一些可能性:   

  • index.php:用数据库调用替换开关。它接受用户的URL并返回相应的“真实”URL(用户从未看到的URL)   
  • 为页面添加标题(也保存在数据库中)   
  • 为您的网站实施Ajax支持

    最后,这会导致一个小型系统,可以扩展到自己的CMS