如何使网站的访问者访问我的网页而不添加页面扩展名

时间:2019-05-04 22:55:14

标签: php apache

我是初学者,并且刚刚托管了我的第一个网站;我现在面临的问题是如何使我的网站访问者即使不添加页面扩展名也可以访问我网站上的页面。

示例:www.example.com/services而不是www.example.com/services.php

3 个答案:

答案 0 :(得分:0)

未指定扩展名时,可以使用url rewrite附加扩展名。或者,您可以构建一个路由系统以将特定的uri链接到特定的资源(quick example here)。后者引入了很多复杂性,但提供了更多的控制权。例如,以下是基于我构建的自定义路由系统的基本伪代码:

$routes->addStaticRoute(
    /* Pattern */ '/home/myPage',
    /* Params  */ null,
    /* File    */ 'path/to/myPage.php'
);

所有请求都自动转到index.php,我的路由器在其中将url请求转换为到资源的实际路由。使用上述静态路由,如果用户请求http://mySite/home/myPage,则路由器将在路径wwwroot/path/to/myPage.php处以静态文件作为响应。

静态路由的另一个示例:

$routes->addStaticRoute(
    /* Pattern */ '/home/{fileName}.{extension}',
    /* Params  */ ['fileName' => 'index', 'extension' => 'php'],
    /* File    */ 'path/to/{fileName}.{extension}'
);

如果用户请求http://mySite/home,则路由器将使用默认的wwwroot/path/to/index.php进行响应。此外,如果他们请求http://mySite/home/page5,则路由器将以wwwroot/path/to/page5.php响应(如果存在)。

路由在某种程度上是一个高级概念,这些是一些过于简化的示例,但我希望这可以帮助您入门。

答案 1 :(得分:0)

编辑.htaccess文件并添加以下内容

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

它将完成

答案 2 :(得分:0)

这是通常的解决方案:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule .* $0.php [L]

但是如果您想使用$_SERVER['PATH_INFO'])来允许:

http://my.domain/script/a/b
# instead of 
http://my.domain/script.php/a/b

...您需要类似的东西:

# specifix scripts:
RewriteRule ^(script1|script2)/(.*) /$1.php/$2 [L]
# or more general, but with issues for sub-directotries
RewriteRule ^([^./]+)/(.*) $1.php/$2 [L]

# final rules:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule .* $0.php [L]