如何重写特定URL以使其不具有.php

时间:2010-12-19 01:06:17

标签: .htaccess

如何重写特定页面以使最后没有.php。我只想重写某些页面而不是全部页面。

3 个答案:

答案 0 :(得分:0)

您会在最后一个“/”后找到最后一个句点,如果找到,则删除句点及其后的所有内容。 (如果URL以“/”结尾,则URL是路径而不是文件名。)然后追加“.php”。

答案 1 :(得分:0)

您将不得不澄清要将/my/path重写为/my/path.php的条件,所有这些信息都会进入重写条件。然后后续的重写规则就是:

RewriteRule ^(.*)$ $1.php

例如,如果您想重写所有未指向静态文件或目录的路径以追加.php,那么.htaccess将如下所示:

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

在实践中,一种非常常见的重写方法是将除静态资产之外的所有请求路由到单个处理程序,然后相应地委托请求。例如:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php

仍然可以通过$_SERVER['REQUEST_URI']在PHP中访问所请求的URI。

答案 2 :(得分:0)

这适用于单个页面,这会将page1.php更改为page1:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /page1\.php\ HTTP/ [NC]
RewriteRule .+ http://www.yourwebsite.com/page1  [R=301,QSA]

RewriteRule ^page1/? /page1.php [QSA,L]

这个用于多个页面,page1.php变为page1,page2.php变为page2等。:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(page1|page2|page3)\.php\ HTTP/ [NC]
RewriteRule .* http://www.yourwebsite.com/%1/ [R=301,QSA]

RewriteRule ^(page1|page2|page3)/? /$1.php [QSA,L]

在第1页执行时,它会给出结果http://www.yourwebsite.com/page1/。如果您要删除最后一个/只需将http://www.yourwebsite.com/%1/替换为http://www.yourwebsite.com/%1

编辑@评论:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /home\.php\ HTTP/ [NC]
RewriteRule .+ http://www.website.com/home  [R=301,QSA]

RewriteRule ^home/? /home.php [QSA,L]