htaccess Apache RewriteRule .asp 到 .php

Posted

技术标签:

【中文标题】htaccess Apache RewriteRule .asp 到 .php【英文标题】:htaccess Apache RewriteRule .asp to .php 【发布时间】:2016-04-06 19:34:30 【问题描述】:

我正在尝试在 htaccess 中使用 RewriteRule 来永久重定向:

http://www.example.com/store/scripts/prodView.asp?idproduct=240

http://www.example.com/index.php?route=product/product&path=59&product_id=50

我试过了:

选项 +FollowSymlinks

重写引擎开启

RewriteCond %QUERY_STRING ^idproduct=240$ [NC]

RewriteRule ^store/scripts/prodView.asp$ index.php\?route=product/product\&path\=59\&product_id\=50? [L,NC,R=301]

.htaccess 在根目录

谁能建议我哪里出错了?谢谢

【问题讨论】:

【参考方案1】:

尝试:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %QUERY_STRING ^idproduct=240$ [NC]
RewriteRule ^store/scripts/prodView\.asp$ index.php?route=product/product\&path=59\&product_id=50 [L,NC,R=301]

RewriteRule url 中没有\?

【讨论】:

到底是什么问题?错误信息 ?索引页面未加载或链接错误? Croises 13,我应该在原始问题中说明这一点:问题是该浏览器根本没有重写 URL,而 URL 地址栏中仍然存在(不正确的)旧 URL。这会导致生成错误(无法定位)页面。好像 htaccess 被忽略了,但我知道它不是因为 htaccess 中的其他命令被遵循【参考方案2】:

我在 Croises 的帮助下解决了这个问题,虽然我不知道问题的全部原因。

在我最初的问题中,为了简洁、相关和清晰,我遗漏了一些位于我正在编写的代码之上的 RewriteRule 代码。此代码由购物车软件提供。

RewriteRule 代码的总和是这样的:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_URI !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

#my code start
RewriteCond %QUERY_STRING ^idproduct=240$ [NC]
RewriteRule ^store/scripts/prodView\.asp$ index.php?route=product/product\&path=59\&product_id=50 [L,NC,R=301]
#my code end

下面的 Croises 问题让我思考“为什么我的代码被忽略了?”。因此,我将我的代码放在了购物车的 RewriteRule 代码之上,现在它可以工作了,虽然我不明白为什么其他代码会干扰我的代码。

现在有效的代码是:

Options +FollowSymlinks
RewriteEngine On

RewriteBase /

#my code start
RewriteCond %QUERY_STRING ^idproduct=240$ [NC]
RewriteRule ^store/scripts/prodView\.asp$ index.php?route=product/product\&path=59\&product_id=50 [L,NC,R=301]
#my code end

#original code
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_URI !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
#original code

我想我因此在 Croises 的帮助下回答了我的问题。我很抱歉在原始问题中遗漏了一些重要信息

【讨论】:

以上是关于htaccess Apache RewriteRule .asp 到 .php的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 中的重写引擎以捕获不以 html 结尾的文件

apache_conf [linux:.htaccess] apache的htaccess说明。 #linux #apache

apache开启 .htaccess

apache开启.htaccess及.htaccess的使用方法

apache开启.htaccess及.htaccess的使用方法

允许htaccess文件apache [重复]