Apache .htaccess重写规则并重定向301-301不工作

Apache .htaccess重写规则并重定向301-301不工作,apache,mod-rewrite,redirect,url-redirection,mod-alias,Apache,Mod Rewrite,Redirect,Url Redirection,Mod Alias,我似乎无法让我的301重定向工作,mod_别名与mod_重写一起启用 我的重写很好,但301s不起作用。基本上我想做的是从动态php页面设置“干净”的URL,这很好用 对于这些动态页面的另一部分,我希望它们重定向到正确的“干净”url 这是我的.htaccess # # Options below ensure that all traffic is directed to www.mydomain # Options +FollowSymlinks RewriteEngine on Rewr

我似乎无法让我的301重定向工作,mod_别名与mod_重写一起启用

我的重写很好,但301s不起作用。基本上我想做的是从动态php页面设置“干净”的URL,这很好用

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

这是我的.htaccess

#
# 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
努力实现…

mydomain.com/videos

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

mydomain.com/page.php?id=1 -> mydomain.com/videos

我尝试在重写规则中使用R=301,但出现了致命错误。这就是我创建重定向301的原因,但它只是在一段时间内不起作用。

好的,如果访问者请求/视频,那么您希望请求被静默地重写到实际路径/page.php?id=1,这样您就可以宣传“干净”URL/视频并隐藏查询字符串

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

问题是,即使是重写的请求也必须重新运行Apache指令,这意味着clean将重写为actual,然后重定向到clean,这将重写为actual,以此类推。这就是为什么你会犯致命的错误

打破此循环的唯一方法是更改实际路径或插入虚拟变量,该变量允许重写引擎在重写完成一次后停止

例如,您可以使用以下选项:

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


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

实际上只是想让最后一行开始工作。它不会自动重定向到我在上面创建的干净URL(有效),我不清楚你想做什么。最好是编辑您的问题,并举例说明访问者将在其浏览器中键入什么内容(或公共链接的外观),然后说明服务器上的路径在查找相关文件或脚本时实际需要的外观。目前,我们只有你现有的配置作为线索,这是错误的,这不是一个很好的起点。对不起,我想这很容易发现。清理URL(工作)mydomain.com/videos 301重定向(不工作)mydomain.com/page.php?id->mydomain.com/videosOh,我想我明白了。您不能将实际路径重定向到干净路径,因为这样会被静默地重写到实际路径。然后会被重定向到干净的路径,以此类推。这样做的唯一方法是创建一个新的实际路径,以便重写引擎可以确定是否重写。我已经完全更改了我的答案,以便它实现我认为您正在尝试实现的目标。