.htaccess重写没有做任何事情

时间:2012-10-30 20:34:15

标签: regex apache .htaccess mod-rewrite rewrite

我的网页网址为http://www.freshmarketstores.com/departments/produce/recipe.php?ing=Akane_Apples&recipe=59,我希望将其清理为http://www.freshmarketstores.com/departments/produce/recipe/Akane_Apples/59

现在,在我的.htaccess文件中,该文件位于produce文件夹中,我有以下代码:

RewriteEngine on
RewriteRule ^recipe/(.*)/(.*)$ recipe.php?ing=$1&recipe=$2 [L]

目前,这不会影响任何事情。当加载recipe.php?ing=Akane_Apples$recipe=59 url时,它加载正常,但不会重写。这是我第一次尝试URL重写,无法解决这个问题。

提前感谢您的帮助。

修改 好的,所以经过昨晚的一些学习,我意识到我正在接近这个。我可以输入http://www.freshmarketstores.com/departments/produce/recipe/Akane_Apples/59并获取存储在... / produce / recipe.php?ing = Akane_Apples& recipe = 59的资源。感谢您的所有帮助。

我现在的问题是,你可以采取相反的方式吗?如果我输入... / produce / recipe.php?ing = Akane_Apples& recipe = 59,我怎样才能将它重定向到/ produce / recipe / Akane_Apples / 59?

3 个答案:

答案 0 :(得分:1)

确保您拥有

AccessFileName .htaccess

在apache中设置服务器和虚拟主机配置文件,默认设置为.htaccess但是它不仅限于此,并且可以命名为任何内容。

基于debian的系统的默认配置文件是/etc/apache2/apache2.conf,对于apache安装目录中的大多数其他系统httpd.conf

一旦设置了访问文件并启用了mod_rewrite,您就可以执行以下操作

http://www.freshmarketstores.com/departments/produce/Akane_Apples/59

RewriteEngine On
RewriteRule ^recipe/([^/]*)/([^/]*)$ /recipe.php?ing=$1&recipe=$2 [L]

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# internal forwarding to /recipe.php
RewriteRule ^recipe/([^/]+)/([^/]+)/?$ recipe.php?ing=$1&recipe=$2 [L,QSA,NC]

# external redirect to /recipe
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+recipe\.php\?ing=([^&]+)&recipe=([^\s]+) [NC]
RewriteRule ^ recipe/%1/%2? [R=301,L]

答案 2 :(得分:0)

你应该没问题

RewriteEngine on
RewriteCond %{THE_REQUEST} \?ing=([^&]+)&recipe=([^&]+) [NC]
RewriteRule ^(departments/produce/recipe)\.php$ http://%{HTTP_HOST}/$1/%1/%2 [NC,R=301,L]