.htaccess仅删除第一个目录的php扩展名

时间:2012-10-04 21:51:39

标签: php html apache .htaccess web

  

可能重复:
  Remove .PHP File Extension in URL

我的.htaccess文件设置为从URL中省略.php扩展名。例如:

mysite.com/page
mysite.com/item
mysite.com/about

阅读:

mysite.com/page.php
mysite.com/item.php
mysite.com/about.php

哪个好;但是,我使用URL的剩余部分作为参数,我想要忽略它们。例如,我想:

mysite.com/item/1234567890/a-product

阅读:

mysite.com/item.php

而不是:

mysite.com/item/1234567890/a-product.php

知道如何在.htaccess中完成此操作吗?这是我目前的.htaccess文件:

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

2 个答案:

答案 0 :(得分:0)

您可以使用某种“路由器”通过路由器文件路由所有请求。在那个路由器文件中,你可以嗅出网址的其余部分并按照你想要的那样做。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ router.php?url=$1 [PT,L,QSA]
</IfModule>

然后在router.php里面,例如:

if (isset($_GET["url"])) {
    $url = $_GET["url"];
}

/ *将$ url分隔成变量,包含你的item.php文件,将$ url的其余部分传递给包含的文件* /

不确定这是否是正确的方法,但这是一种方式。

答案 1 :(得分:0)

尝试:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/?
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)$ %1.php [L]

这可以执行您的规则最初执行的操作以及删除第一个文件夹之后的内容。