我有这三个链接:
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文件中完成该操作才能获得该文件?如何将一个特定链接重定向到另一个特定链接?
在阅读澄清文件夹结构的评论后,我更正了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.php
或htdocs/my_projects/my_website.html
,取决于您的需求(显然两者不会同时工作)。
这里的“假”网址中的my_projects
与真实文件夹"my_projects"
相撞,因此Apache将转到该文件夹并看到那里没有my_website(没有扩展名)文档(它将无法达到重写规则)。
在SO中有一个问题可以为此提供解决方案,但它不是一个完美的解决方案,它有一些边缘情况,其中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]
(不要同时使用这两种,只需选择其中一种,或使用它们来满足您的需求)
重写规则的第一部分是“假”网址的正则表达式,第二部分是真实文件夹结构到您要显示的页面的相对路径。
在正则表达式中,我们捕获.../my_website
之后我们认为可能的查询参数,并将其粘贴到规则的第二部分(my_website.php
)中的$1
之后。
稍后,如果你想将网址指向my_website.html
,你必须改变规则的第二部分,在那里它说.php
,用.html
替换它。
顺便说一下,它是完全有效的,你会在大多数SEO
友好的网站上看到它写一个网址作为http://www.somesite.com/some-page-locator
,并有一个重写规则,将该网址转换为网页上的页面,这是我写的我的第一个答案。