我有以下三个链接:
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文件中包含哪些内容?如何使一个特定的链接重定向到另一特定的链接?
答案 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.php
或htdocs/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转换为页面的重写规则。在网站上,这是我在第一个答案中写的。