首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.htaccess重写程序和重定向301 - 301不工作

.htaccess重写程序和重定向301 - 301不工作
EN

Stack Overflow用户
提问于 2013-03-25 00:05:23
回答 1查看 2.8K关注 0票数 0

我似乎无法让我的301重定向工作,mod_alias与mod_rewrite一起启用。

我的重写很好,但是301不工作。基本上,我要做的是从动态php页面中建立“清洁”URL,这很好.

对于这些动态页面的另一部分,我希望它们重定向到正确的“干净”url。

这是我的.htaccess

代码语言:javascript
复制
#
# Options below ensure that all traffic is directed to www.mydomain
#
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteRule (.*) http://www.mydomain.com/$1 [R=301,L]
RewriteRule ^index.php$ http://www.mydomain.com/ [R=301,L]

#
# URL Rewrites
#
RewriteRule videos page.php?id=1 [L]

#
# Custom redirects from OLD URLs
#
redirect 301 /page.php?id=1 /videos

试图实现.

代码语言:javascript
复制
mydomain.com/videos

(this works - redirect does not)  

如果有人访问动态页面(page.php?id=1),他们会自动重定向到干净的URL。

代码语言:javascript
复制
mydomain.com/page.php?id=1 -> mydomain.com/videos

我尝试在R=301中使用RewriteRule,但出现了致命错误。这就是为什么我创建了重定向301,但它只是没有工作时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-25 19:06:55

好的,如果访问者请求/videos,那么您希望将请求悄悄重写到实际路径/page.php?id=1,这样您就可以为“干净”的URL /videos做广告,并隐藏查询字符串的丑陋。

但是,您也希望强制实际请求/page.php?id=1的访问者永久地重定向到“干净”的/videos,这样他们就可以得到这样的信息:查询字符串的丑陋不再适合他们的眼睛。

问题是,即使是重写的请求也必须再次遍历Apache指令,这意味着clean将重写为all,后者将重定向为clean,后者将重写为all,以此类推。所以你才会犯致命的错误。

中断此循环的唯一方法是更改实际路径或插入一个虚拟变量,该变量允许RewriteEngine在重写一次之后停止。

例如,您可以使用以下内容:

代码语言:javascript
复制
RewriteCond %{QUERY_STRING} !&redirect=done$
RewriteCond %{QUERY_STRING} ^id=1
RewriteRule /page.php /videos [R=permanent]
RewriteRule /videos /page.php?id=1&redirect=done

这将始终静默地将/videos重写到/page.php?id=1&redirect=done,但只有在对page.php的请求没有以redirect=done结尾的查询字符串(也有以id=1开头的查询字符串)的情况下,才会将page.php重定向到/videos。

它是复杂的,但这是我唯一能想到的打破无限循环的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15605703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档