0

可能重复:
使用 .htaccess 删除 .php 扩展名

我对.htaccess 知之甚少,我想要完成的是两方面的。

  1. 允许使用或不使用 .php 以及使用或不使用尾部斜杠来调用对 .php 的请求。例如。

    /profile.php 作品
    /profile 追加.php,作品
    /profile/ 追加.php所以它工作

  2. 如果尝试上述操作后文件或目录不存在,则视为404并重定向到另一个页面。

    /something 失败,重定向到 /404.php?id=$1(请求的 url)

我有两个单独工作的规则,但我需要对这些规则或其他东西进行条件化。任何意见,将不胜感激。

重写引擎开启

# 这适用于 PHP 部分。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
重写规则 ^([^/]*)/?$ $1.php

# 这适用于一般的 404 处理
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
重写规则 ^(.*)$ /404.php?url=http://%{HTTP_HOST}/$1 [L]
4

1 回答 1

1

Apache 会自动将 .php 附加到/profile并且/profile/不附加任何 mod_rewrite。您唯一应该处理的是 404 页面。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.php?url=http://%{HTTP_HOST}/$1 [L]

但是,如果由于某种原因无法正常工作(例如 apache 配置不正确):

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ $1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.php?url=http://%{HTTP_HOST}/$1 [L]
于 2013-01-23T15:32:58.593 回答