【问题标题】:redirect using htaccess file [closed]使用htaccess文件重定向[关闭]
【发布时间】:2012-07-25 01:30:52
【问题描述】:

编辑:

我想重定向一个网址

到:www.example.com/location/sydney

来自:www.example.com/rss.php?pickup=sydney

问题是我无法从 www.example.com/location/sydney 获取 $_GET['pickup'] 值,并且位置也会更改,例如:它可能是凯恩斯、伦敦等。我有一个名为 rss 的文件。 php 中,我将从 $_GET['pickup'] 中获取值。 我试过这个:- Redirect /location http://deals.vroomvroomvroom.com.au/rss.php

但它给了我一个 url :- http://deals.vroomvroomvroom.com.au/rss.php/sydney 当我输入 url www.example.com/location/sydney

【问题讨论】:

  • 您是要重写还是重定向?您是否希望用户查看/使用像 http://www.example.com/location/sydney 这样的 URL,但要处理的代码是 index.php,其中包含 GET 中的位置元素?或者您是否尝试向http://www.example.com/?location=sydney 发出请求,导致用户在其地址栏中以http://www.example.com/location/sydney 结束?还是你真的想要两者?

标签: php .htaccess mod-rewrite


【解决方案1】:

在 location 目录中放置一个 .htaccess 文件:

RewriteEngine On
RewriteRule (.*) ../index.php?location=$1&e=1 [L,QSA]

这假设您要用于对 /location 的请求的 index.php 位于 location 目录上方的目录中

如果您还需要重定向(www.abc.com/?location=sydneywww.abc.com/location/sydney),那么我认为最好的方法是将以下内容添加到位于 DocumentRoot 中的(单独的).htaccess 文件中:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)location=([^&]*)(.*) [NC]
RewriteCond %{QUERY_STRING} !&e=1 [NC]
RewriteRule ^(.*)$ $1/location/%2?%1%3 [R=301,L,NE]

【讨论】:

  • 感谢您的回复,我的链接是-www.abc.com/?location=sydney 我想将其重定向到www.abc.com/location/sydney 也可以是任何位置。所以我也应该创建location 文件夹吗?如果我错了,我是新手。
  • 好的,所以如果有人将www.abc.com/?location=sydney 放在浏览器地址栏中,您希望浏览器重定向(更改地址栏中的 URL)到 www.abc.com/location/sydney 但您还想实际使用文件 DocumentRoot/index.php 来回答相同的请求,就好像该请求是针对 www.abc.com/?location=sydney 而没有任何 Apache 规则一样,对吧?所以基本上你想要重写和重定向,对吧?
  • 是的@ghbarratt 怎么做?
  • 看看我在答案中添加了什么。让我知道是否有效。
  • 非常感谢@ghbarratt 它的工作。
【解决方案2】:

在你的 .htaccess 文件中试试这个

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

【讨论】:

    【解决方案3】:

    试试这个

    RewriteEngine    On
    RewriteCond      %{QUERY_STRING}    ^location=1$
    RewriteRule      (.*)               $1?     [R=permanent]
    
    【解决方案4】:

    你启用了 mod_rewrite 吗? sudo a2enmod rewrite

    当你点击刷新时tail -f /var/log/apache2/error.log 的输出是什么?

    【讨论】:

    • 对不起,我是新手,你能详细解释一下如何检查输出吗?在哪里检查?
    • 我的项目基于php,托管在linux服务器上
    • 运行我列出的那些命令并告诉我们输出结果。
    【解决方案5】:

    您可能会遇到两个问题:

    1) 是否启用了 mod_rewrite?使用以下命令检查:apache2ctl -M | grep rewrite - 如果启用,您应该会看到类似于rewrite_module (shared) 的行。如果没有 - 启用它。

    2) 您是否有权使用 .htaccess 文件?检查您的虚拟主机的配置 - 这应该包含 AllowOverride 行,类似于:

    <Directory "/var/www/your/site/">
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    

    现在在我的示例中 mod_rewrite 不起作用,因为 AllowOverride 设置为 None。在这里检查您需要什么:http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride,但您基本上需要将其设置为任何其他有效选项,即不是 None,否则 Apache 将完全忽略 .htaccess 文件。

    【讨论】:

      【解决方案6】:

      位置可以是任何东西......我尝试了以下代码但它不起作用。

      如果你想将 from /location.php?location=sydney to /location/sydney 重定向,你的 RewriteRule 是错误的。唉,你不能根据查询参数重写。

      【讨论】:

      • 那我该怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      • 2013-08-09
      • 2015-10-07
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多