我似乎无法使我的301重定向工作,mod_alias与mod_rewrite一起启用。
我的重写工作正常,但301不起作用。基本上我要做的是从动态php页面设置“干净”的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),他们会自动重定向到干净的网址。
mydomain.com/page.php?id=1 -> mydomain.com/videos
我尝试在RewriteRule中使用R = 301,但发生了致命错误。所以这就是我创建重定向301的原因,但它只是不起作用。
答案 0 :(得分:0)
好的,所以如果访问者请求/视频,那么您希望将请求静默地重写为实际路径/page.php?id=1,以便您可以宣传“干净”的URL /视频并隐藏查询字符串丑陋。
但您还想强制实际请求/page.php?id=1的访问者永久重定向到“干净”的网址/视频,这样他们就会收到查询字符串丑陋不再适合他们眼睛的消息
问题是即使重写的请求也必须重新遍历你的Apache指令,这意味着clean将重写为实际,然后重定向到clean,这将重写为实际,等等无限。这就是为什么你会遇到致命的错误。
打破此循环的唯一方法是更改实际路径或插入一个虚拟变量,允许RewriteEngine在重写完成一次后停止。
例如,您可以使用以下内容:
RewriteCond %{QUERY_STRING} !&redirect=done$
RewriteCond %{QUERY_STRING} ^id=1
RewriteRule /page.php /videos [R=permanent]
RewriteRule /videos /page.php?id=1&redirect=done
这将始终默默地重写/视频到/page.php?id=1&redirect=done,但如果page.php的请求没有查询字符串,它只会将/page.php重定向到/ videos以redirect=done
结尾(并且还有一个以id=1
开头的查询字符串。)
这是令人费解的,但这是我能想到打破无限循环的唯一方法。