.htaccess:将特定链接重定向到另一个?

时间:2018-09-11 23:10:56

标签: .htaccess xampp

我有以下三个链接:

localhost/my_projects/my_website.php
localhost/my_projects/my_website.html
localhost/my_projects/my_website

php和html文件的路径如下:

C:\xampp\htdocs\my_projects\my_website.php
C:\xampp\htdocs\my_projects\my_website.html

没有扩展名的链接是“人为的”,我想使用所述链接:

localhost/my_projects/my_website

获取以下任一链接的内容:

localhost/my_projects/my_website.php
localhost/my_projects/my_website.html

使用两个示例文件而不是一个示例的原因是,我希望能够在编辑htaccess文件时在这两个文件之间切换。显然,我一次只想访问其中一个文件。

要完成此操作,我需要在my_projects文件夹中的.htaccess文件中包含哪些内容?如何使一个特定的链接重定向到另一特定的链接?

1 个答案:

答案 0 :(得分:0)

阅读您的注释以阐明文件夹结构后,我更正了RewriteRule。 (顺便说一句,最好将信息添加到问题本身而不是注释中。)

您要定位的网址是:http://localhost/my_projects/my_website

http://是协议
localhost是您的域名(在互联网上也可以是127.0.0.1或类似www.example.com的域名)

我假设您正在端口80上运行Apache,否则,您还需要在url中指定端口。例如,对于端口8086,它将是http://localhost:8086/my_projects/my_website

实际路径是htdocs/my_projects/my_website.phphtdocs/my_projects/my_website.html,具体取决于您的需求(显然,两者不能同时工作)。

“假” URL中的my_projects与真实文件夹"my_projects"冲突,因此Apache将转到该文件夹​​,并在其中看到没有my_website(无扩展名)文档(它将不会)达到重写规则)。

SO中有一个问题可以解决此问题,但这不是一个完美的解决方案,它在某些极端情况下URL仍然会失败或使其他URL失败。我昨天发布了它,但是现在似乎找不到了。

如果您可以灵活地执行此操作,则简单的解决方案是更改“假”网址,以免与真实路径冲突。

例如,一个选项是用连字符替换下划线。 然后,如果要在URL中保留某种“伪”文件夹结构,则可以以http://localhost/my-projects/my-website的身份访问该页面。否则,您可以简单地使用http://localhost/my-website

以下是两种选择:

# This is for the directory not to be shown. You can remove it if you don't mind that happening.
Options -Indexes

RewriteEngine On

#Rule for http://localhost/my-projects/my-website
RewriteRule ^my-projects/my-website(.+)?$ my_projects/my_website.php$1 [NC,L]

#Rule for http://localhost/my-website
RewriteRule ^my-website(.+)?$ my_projects/my_website.php$1 [NC,L]

(不要同时使用两者,只需选择两者之一,或使用它们来使其适应您的需求)

重写规则的第一部分是“假” URL的正则表达式,第二部分是您要显示的页面的真实文件夹结构的相对路径。

在正则表达式中,我们捕获.../my_website之后我们可能假设的查询参数,并将其粘贴到规则第二部分(my_website.php)中$1之后。

稍后,如果您想将网址指向my_website.html,则必须更改规则的第二部分,该部分的内容为.php,用.html替换。

顺便说一句,它是完全有效的,您将在大多数SEO友好的网站中看到它,将URL编写为http://www.somesite.com/some-page-locator,并具有将该URL转换为页面的重写规则。在网站上,这是我在第一个答案中写的。