1

编辑 :

我想重定向一个网址

到 :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

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

4

6 回答 6

1

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

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
于 2012-07-26T13:12:54.747 回答
1

试试这个

RewriteEngine    On
RewriteCond      %{QUERY_STRING}    ^location=1$
RewriteRule      (.*)               $1?     [R=permanent]
于 2012-07-26T13:23:46.263 回答
1

在 location 目录中放置一个 .htaccess 文件,其中包含以下内容:

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

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

如果您还需要重定向(www.abc.com/?location=sydneyto www.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]
于 2012-07-26T14:23:50.207 回答
0

你启用了 mod_rewrite 吗?sudo a2enmod rewrite

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

于 2012-07-26T12:51:55.980 回答
0

您可能会遇到两个可能的问题:

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文件.

于 2012-07-26T13:13:35.863 回答
0

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

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

于 2012-07-26T13:15:05.897 回答