【问题标题】:Is my rewrite code correct?我的重写代码是否正确?
【发布时间】:2014-04-02 19:35:46
【问题描述】:

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

我打算把它放在服务器上的根 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]

【问题讨论】:

  • 确实知道您可以在不是客户服务器的计算机上安装 Apache,对吧?
  • Y\o\u a\r\e e\s\c\a\p\i\n\g w\a\y t\o\o m\u\c\h t\h\e\ r\e ...
  • 呃,我不明白你所说的“逃避太多”是什么意思?
  • 是的,我知道并且我有一个 XAMPP - 但我无法让它在本地工作。会继续努力。

标签: apache .htaccess mod-rewrite


【解决方案1】:

我通常这样做并且工作正常。

如果用户输入带有 highlight/restore-act-passed/ 的 URL,那么将在浏览器中显示 index.php/highlights/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/highlights/restore-act-passed/ 的 URL,那么将显示来自 _http://%{HTTP_HOST}/gulf-mexico/highlights/restore-act-passed/ 的内容

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

【讨论】:

  • 由于stackoverflow不接受使用http添加链接,我在我的回答中将其替换为_http。
【解决方案2】:

您不需要指定 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 格式显示在浏览器或搜索引擎结果中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多