我的重写代码是否正确?

时间:2014-04-01 16:57:02

标签: apache .htaccess mod-rewrite

我正在尝试为我的客户网站编写重写代码。我无法验证它是否正确,因为我还无法访问服务器。我知道这听起来很奇怪,但这是我必须接受和解决的问题。

我打算把它放在服务器上的root htaccess文件中。底线是这个URL不起作用:

http://www.regions.noaa.gov/gulf-mexico/index.php/highlights/restore-act-passed/

因此,当上述情况发生时,我希望它永久重定向到:

http://www.regions.noaa.gov/gulf-mexico/highlights/restore-act-passed/

这就是我所拥有的

RewriteEngine on
RewriteCond %{HTTP_HOST} ^regions\.noaa\.gov$ [OR]
RewriteCond %{HTTP_HOST} ^www\.regions\.noaa\.gov$
RewriteRule ^gulf\-mexico\/index\.php\/highlights\/restore\-act\-passed\/$ "http\:\/\/www\.regions\.noaa\.gov\/gulf\-mexico\/highlights\/restore\-act\-passed\/" [R=301,L]

我很感激有关此的任何反馈。感谢。


更新 - 感谢所有回复的人。这是我不明白的。我在我的网络托管公司的代码生成器上找到了这个代码。它似乎有效:

RewriteCond%{HTTP_HOST} ^ designerandpublisher.com $ [OR] RewriteCond%{HTTP_HOST} ^ www.designerandpublisher.com $ RewriteRule ^ services.html $" http \:// www.regions.noaa.gov/gulf-mexico/highlights/restore-act-passed/" [R = 301,L]

2 个答案:

答案 0 :(得分:0)

我通常喜欢这样并且工作正常。

如果用户输入带高亮的URL / restore-act-passed / THEN将在浏览器中显示index.php / highlight / restore-act-passed /中的内容。

# [NC]   Means “No Case”, so it doesn’t matter whether the domain name was written in upper case, lower case or a mixture of the two.
RewriteEngine on
RewriteRule ^highlights/restore-act-passed/?$ index.php/highlights/restore-act-passed/  [NC]

如果用户输入带有index.php / highlight / restore-act-passed /的URL,那么将显示来自_http://%{HTTP_HOST} / gulf-mexico / highlight / restore-act-passed / <的内容/ p>

RewriteRule ^index.php/highlights/restore-act-passed/?$ _http://%{HTTP_HOST}/gulf-mexico/highlights/restore-act-passed/  [NC]

答案 1 :(得分:0)

您不需要指定HTTP_HOST,除非您在此处有多个域(附加组件,子域,托管域等)。如果你想要指定它,它可以简化为一行:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?regions\.noaa\.gov$
RewriteRule ^gulf\-mexico\/index\.php\/highlights\/restore\-act\-passed\/$ "http\:\/\/www\.regions\.noaa\.gov\/gulf\-mexico\/highlights\/restore\-act\-passed\/" [R=301,L]

实际上,子域甚至不需要 www,但它不会受到伤害。然后,在重写规则中,您只需要转义模式中的特定元字符,而不需要替换字符串中的特定元字符:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?regions\.noaa\.gov$
RewriteRule ^gulf-mexico/index\.php/highlights/restore-act-passed(/)?$ http://www.regions.noaa.gov/gulf-mexico/highlights/restore-act-passed/ [R=301,L]

我也做了最后一个(尾随)/可选。由于您要访问同一个域,因此无需重复:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?regions\.noaa\.gov$
RewriteRule ^gulf-mexico/index\.php/highlights/restore-act-passed(/)?$ /gulf-mexico/highlights/restore-act-passed/ [R=301,L]

301代码告诉搜索引擎此URL或URI已永久移动(它也会在浏览器地址栏中显示更改,因此人类访问者可以选择重新为其添加书签)。

由于这似乎是一个SEO URI,大概它会被翻译成动态格式(/gulf-mexico/index.php?area=highlights&item=restore-act-passed)。这意味着上述重写必须在之前完成任何SEO到动态的翻译。另一种方法是直接将其转换为动态格式,但是因为你给了301,大概你想要SEO格式显示在浏览器或搜索引擎结果中。