htaccess重定向多个URL

时间:2017-07-06 03:28:43

标签: php apache .htaccess

我通常使用这个网站来解决我的问题,但是我第一次找不到合适的问题,所以请原谅我,如果它确实存在的话!

目前,我有这种格式的有效网址:

referencingOutlets

最后的数字是由CMS动态生成的,因此发布的任何新内容都会发生变化。

为了使用更短的网址,我希望这些网页可以通过以下格式访问这些网页:

<?php

if ($_POST['submit']) {

    if(!$_POST['name']) {
        $error="<br/>-Please enter your name";
    }

    if(!$_POST['email']) {
        $error.="<br/>- Please enter your email";
    }

    if(!$_POST['subject']) {
        $error.="<br/>- Please enter a subject";
    }

    if(!$_POST['message']) {
        $error.="<br/>- Please enter a message";
    }

    if(!$_POST['check']) {
        $error.="<br/>- Please confirm you are human";
    }

    if($error) {
        $result="Whoops, there is an error; Please correct the following: $error";
    } else {
        mail("namitajamwal19@gmail.com", "Contact message", "Name: ".$_POST['name']."
        Email: ".$_POST['name']."
        Subject: ".$_POST['subject']."
        Message: ".$_POST['message']);"

        {
        $result="Thank you, I'll be in touch shortly";
        }
    }
}
?>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Contact Us</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>


    <section id="contact">
        <div class="container">

            <div class="row">
                <div class="col-md-6 col-md-offset-3">
                    <h1>Contact Us</h1>

                    <?php echo $result;?>

                    <p>Send a message via the form below</p>

                    <form method="post" role="form">

                        <div class="form-group">
                            <input type="text" name="name" class="form-control" placeholder="Your Name" value="<?php echo $_POST['name']; ?>">
                        </div>

                        <div class="form-group">
                            <input type="email" name="email" class="form-control" placeholder="Your email" value="<?php echo $_POST['email']; ?>"> 
                        </div>

                        <div class="form-group">
                            <textarea name="subject" rows="5" class="form-control" placeholder="Subject"><?php echo $_POST['subject']; ?></textarea>
                        </div>

                        <div class="form-group">
                            <textarea name="message" rows="5" class="form-control" placeholder="Message..."><?php echo $_POST['message']; ?></textarea>
                        </div>

                        <div class="checkbox">
                            <label>
                                <input type="checkbox" name="check">I am Human
                            </label>
                        </div>

                        <div align="center">
                        <input type="submit" name="submit" class="btn btn-secondary" value="send message"/>
                        </div>
                    </form>

                </div>
            </div>


        </div>
    </section>



    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>

请帮助我,如果有更好的选择而不是使用htaccess,请告诉我。

2 个答案:

答案 0 :(得分:0)

当然!您可以在apache的虚拟主机配置文件中使用mod_rewrite。

除了Sarcasm之外,重新路由URL的方法是使用接受url 的工具并对其执行某些操作,在典型的php安装的情况下是apache。如果PHP能够在不使用http服务器的情况下接受连接,那么PHP就可以做到。我想可以用PHP构建服务器并将其作为单例运行,但我从来没有听说过这样的事情。

所以这就是事情,如果你明白你想要做什么,使用.htaccess和mod_rewrite并不是很难。在您的情况下,您希望能够将news.example.com/n15807翻译成非常长的uri。真的很长uri是服务器实际加载的内容。

mod_rewrite实际上与正则表达式匹配,并将其替换为另一个uri。因此,您可以尝试匹配^([^w]{3}).example.com/([a-z])([0-9]+)$之类的内容并使用它来替换{​​{1}}中的值(我不知道数字前面的n应该是什么意思。)

我给的正则表达式只是为了指出你正确的方向;我还没有测试过它。 [编辑 - 它绝对不会像写的那样工作;自从我在mod_rewrite工作以来已经有一段时间了。但这个想法仍然有效。 FWIW,我不会尝试使用子域名,但是

摘要:使用适用于网址的工具。最容易获得的方式是使用.htaccess。一旦你弄明白,你就完成了。您可以在以后的网站中反复使用它。

答案 1 :(得分:0)

经过几个小时的搜索,我终于明白了!

RewriteEngine on
RewriteCond %{HTTP_HOST} ^news.example.com$
RewriteRule ^news/(.*)$ http://www.example.com/index/modules/news/article.php?storyid=$1\#siteBody [R=301,L,NE]

认为有一天可能会帮助某人不要像我一样花费多少时间!