隐藏URL中的.php扩展名无效

时间:2014-12-29 15:02:24

标签: php apache .htaccess url mod-rewrite

我试图在我的网站上隐藏PHP扩展程序,例如,如果我转到http://code-up.nl/contact,则会加载http://code-up.nl/contact.php文件。我的服务器上有几个域。在网站的根目录(位于/var/www/code-up.nl)我有以下.htaccess文件:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L]

在我的apache虚拟主机文件中,我已将AllowOverride设置为All:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName code-up.nl
    ServerAlias www.code-up.nl
    DocumentRoot /var/www/code-up.nl

    <Directory />
            Options FollowSymLinks
            AllowOverride All
    </Directory>

    <Directory /var/www/code-up.nl/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我认为一切都是正确的但是当我去http://code-up.nl/contact时我仍然会收到错误404。我已经找到了解决方案并尝试了许多方法,但它只是赢了工作。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

在DOCUMENT_ROOT下的.htaccess中试试这个:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]