0

可能重复:
删除 URL 中的 .PHP 文件扩展名

我将 .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
4

2 回答 2

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]

这与您的规则最初所做的一样,并在第一个文件夹之后删除了这些东西。

于 2012-10-04T23:27:49.967 回答
0

您可以使用某种“路由器”通过路由器文件路由所有请求。在那个路由器文件中,你可以嗅出 url 的其余部分,然后用它做你想做的事。

<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 的其余部分传递给包含的文件 */

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

于 2012-10-04T21:59:37.147 回答