4

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

以这个网站为例:

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

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

谢谢

4

3 回答 3

5

三种最常见的方法是:

  • 使用索引页(即只需创建一个目录并将index.html文件放入其中)。
  • 使用重写引擎(例如 Apache 的mod_rewrite)将 URL 映射到不同的文件(这是 PHP 领域的常用方法)。
  • 使用为您处理 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 中,这是通过为子例程名称提供属性来完成的。

Dancer 有自己的路由处理器语法

Web::Simple 使用子程序原型

Django 使用一个包含模式列表的单独文件

于 2013-01-08T09:08:09.917 回答
2

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

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

要从 url 中删除 .html 扩展名,只需链接到没有 .html 的页面

<a href="http://www.mysite.com/page">linkhere</a>
于 2013-01-08T09:04:40.350 回答
1

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

于 2013-01-08T09:07:52.077 回答