首页 文章

.htaccess规则在转发真实404时删除.php [重复]

提问于
浏览
0

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

我对.htaccess知之甚少,我想要完成的是双重的 .

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

/profile.php 有效
/profile 追加.php,有效
/profile/ 追加.php所以它有效

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

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

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

RewriteEngine on

# This works for the PHP part.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/?$ $1.php

# This works for general 404 handling
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /404.php?url=http://%{HTTP_HOST}/$1 [L]

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]
    

相关问题