如何获得没有任何文件扩展名的用户友好的URL?

时间:2013-01-08 08:54:30

标签: html url web webserver

很长一段时间以来,我一直想知道人们如何设法让网址在没有文件扩展的情况下工作,例如“.html”或“.apsx”。

以这个网站为例:

http://www.axongarside.com/Communication
http://www.axongarside.com/Communication/Compleat
http://www.axongarside.com/Brand
http://www.axongarside.com/Brand/K3-Group

他们是如何做到这一点的?我能想到的唯一方法是为每个页面创建一个新目录,并在每个目录中都有一个索引页面,但这对于一个更大的网站来说将是一个巨大的麻烦。还有其他办法吗?

三江源

3 个答案:

答案 0 :(得分:4)

最常见的三种方式是:

  • 使用索引页(即只创建一个目录并在其中放入index.html文件)。
  • 使用重写引擎(例如Apache的mod_rewrite)将URL映射到不同的文件(这是PHP-land中的常用方法)。
  • 使用前端控制器脚本为您处理URL(这是MVC框架的常用方法)。

后一种方法会在Apache服务器配置中使用类似的东西:

WSGIDaemonProcess example processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup example
WSGIScriptAlias / /hosts/example.com/application/wsgi.py

SetHandler fcgid-script
Alias / /hosts/example/application.fcgi/

对于使用WSGI(Python)或FastCGI的脚本(跨语言,该特定示例分别来自我正在编写的Perl应用程序)。

URL格式将由脚本本身处理,不同的框架采用不同的方法解决问题。

在Catalyst中,这是由providing attributes to subroutine names完成的。

Dancer有自己的route handler syntax

Web :: Simple使用subroutine prototypes

Django使用a separate file containing a list of patterns

答案 1 :(得分:2)

如果您使用的是Apache,可以使用.htaccess文件删除.html扩展名,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

要从网址中删除.html扩展程序,只需链接到不带.html的网页

<a href="http://www.mysite.com/page">linkhere</a>

答案 2 :(得分:1)

如果您使用的是Apache HTTP Server,则应检查mod_rewrite 功能。 IIS也有类似的URL重写功能。