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及.htaccess的使用方法