从URL中删除扩展名不起作用

时间:2012-11-16 12:40:09

标签: php .htaccess

我正在使用 htaccess 从网址中删除 .php ,但它无效。

http://www.me.com/index.php应该阅读http://www.me.com/index

有什么理由?

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

我也看了这些例子,但没有运气:

1 - 2 - 3

2 个答案:

答案 0 :(得分:1)

我认为您错过了重点 - 它不会更改/重写URL - 它会将.php添加到您请求的URL中,因此当您请求http://www.example.com/index时,它会检查所请求的文件名不是目录( !-d)然后检查存在的有效PHP文件(-f)。然后重写请求(而不是URL)以请求index.php文件。

documentation for mod_rewrite这是描述

  

提供基于规则的重写引擎,以便动态重写请求的URL

答案 1 :(得分:1)

我使用了这个.htaccess

AddDefaultCharset utf-8
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

DirectoryIndex index.php

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)/([^/]+)?$ index\.php?page=$1&s=$2&o=$3 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)?$ index\.php?page=$1&s=$2 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})/?$ index\.php?page=$1 [L]

RewriteRule ^([a-zA-Z0-9_-]{3,20})?$ index\.php?page=$1 [L]

ErrorDocument 404 /404

重命名三个参数

  • 1st是Page
  • 第二是s
  • 3rd is o

这是为了避免在我的网址中使用?&,然后我会像这样调用我的网页

http://testsite/page/s/o

如果你只是做print_r($_REQUEST)它会给你这个

Array(
page => page
s    => s
o    => o
)

为避免扩展,我使用以下机制

$file = $_REQUEST['page'] . ".php";
if (file_exists('inc/' . $file)) {
    include('inc/' . $file);
}

希望它也适合你