.htaccess:声明扩展名的文件重定向到文档根目录

时间:2014-07-01 18:14:53

标签: php .htaccess mod-rewrite redirect url-rewriting

我有一个奇怪的.htaccess问题,只发生在一个网站上。

基本上我正在尝试删除.php扩展名,并将任何扩展名重定向到同一页面而没有扩展名。

这是我的.htaccess

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteBase /
</IfModule>
# ------------------------------------------------------------------------------
# | Remove the slash                                                           |
# ------------------------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/$ $1 [R=301,L]
</IfModule>
# ------------------------------------------------------------------------------
# | Redirect to extensionless url                                              |
# ------------------------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
    RewriteRule ^(.+)\.php$ $1 [R=301,L]
</IfModule>

# ------------------------------------------------------------------------------
# | Pretty urls                                                                |
# ------------------------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule .* - [L]

    # rules here

</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php [L]
</IfModule>

因此,如果我输入website.com/page它会有效并显示该页面,但website.com/page.php会将我重定向到http://website.com/var/www/vhosts/website.com/httpdocs/page

这个.htaccess在其他共享网站上成功运作,但这个特定的网站没有。

问题出在哪里?这取决于其他一些配置吗?不幸的是我无法访问错误日志,这个文件就是我所拥有的。

谢谢。

1 个答案:

答案 0 :(得分:1)

将您的扩展程序删除规则更改为:

# ------------------------------------------------------------------------------
# | Redirect to extensionless url                                              |
# ------------------------------------------------------------------------------
RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]