apache mod_redirect 帮助

apache mod_redirect 帮助

我有数百个动态创建的 URL - foo.com/123、foo.com/contact 等等。

我想将所有这些 URL(不知道全部,只知道有 az 或 1-9)重定向到 foo.com。

请让我知道如何使用 apache 重写规则来实现这一点

我努力了 : RewriteRule ^(.*)$ index.php

但这并不管用。

答案1

正如 Brian 上面所回答的:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]

正如上述克里斯所建议的:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=307]

如果您尝试进行内部重定向,则 URL 不会在浏览器中重写:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php

Brian 的方法将执行 301 重定向。这将告诉任何搜索引擎/浏览器/缓存,内容已永久移动,现有 URL 已消失,不应使用。Chris 的方法将执行 307 重定向。307 相当于 HTTP/1.1 中的临时重定向。两者都将在浏览器中重写 URL,两者都会导致访问该网站的人单击该 URL 并被重定向到新的 URL foo.com/index.php。最后一种方法将在内部重写 URL,以便浏览器中的 URL 仍然是 foo.com/contact,而不是 foo.com/index.php

这些规则实际上都不会将任何参数传递给 index.php,因此 301 和 307 重定向实际上会丢失 URL 的其余部分。如果您使用 301/307 重定向将所有内容重定向到门户页面,则此行为可能是可以接受的。如果这是您的意图,我建议使用:

ErrorDocument 404 /index.php

然后确保该页面中的所有图像/链接都是相对/绝对链接的,或者使用以确保在结果页面上正确重写 URL。

如果要将请求的URI作为参数传递给index.php进行解析:

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php?page=$1

在这种情况下,$_REQUEST['page'] 将包含来自 foo.com/contact 的 /contact

答案2

您的重写规则将导致无限循环,因为 index.php 也匹配^(.*)$。您应该能够使用类似以下方法(未经测试):

RewriteCond %{REQUEST_URI} !index.php
RewriteRule ^(.*)$ /index.php [R=301]

附加[R=301]将返回“永久移动”重定向状态代码。

答案3

根据他的网址结构,他可能不想要 [R=301],因为他正在尝试创建漂亮的网址。

相关内容