Apache mod_rewrite 和 .php 文件扩展名

问题描述 投票:0回答:0

我在使用 mod_rewrite 时遇到了问题。我有一个基本的 PHP 网站,其中所有文件都有 .php 扩展名。

我想要发生的是:

www.site.example/file
www.site.example/file/

两者都提供

www.site.example/file.php
,但没有显示扩展名(因此 URL 栏显示
www.site.example/file

如果有人输入

www.site.example/file.php
,它会重定向到
www.site.example/file

我的

.htaccess
代码如下:

Options +FollowSymLinks

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^([^/]+)/$ /$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ $1 [R=301,L]

RewriteRule ^([^/.]+)$ $1.php [L]

# Rules For file inside subfolders like
# /folder/myfile --> /folder/myfile.php
# and
# /folder/myfile/ --> /folder/myfile
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([^/]+)/$ /$1/$2 [R=301,L]
RewriteRule ^(.+)/([^/.]+)$ $1/$2.php [L]

前两个(/文件和

/file/
服务
file.php
)工作正常,但如果我输入
www.site.example/file.php
,浏览器重定向到:

http://www.site.example/home/siteuser/public_html/file

并给出 404 错误

重写日志显示如下(loglevel 2):

[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] rewrite 'about-us.php' -> 'about-us'
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] explicitly forcing redirect with http://www.mysite.example/home/mysite.example/public_html/about-us
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] escaping http://www.mysite.example/home/mysite.example/public_html/about-us for redirect
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] redirect to http://www.mysite.example/home/mysite.example/public_html/about-us [REDIRECT/301]
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] rewrite 'home/mysite.example/public_html/about-us' -> 'home/mysite.example/public_html/about-us.php'
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (2) [perdir /home/mysite.example/public_html/] strip document_root prefix: /home/mysite.example/public_html/home/mysite.example/public_html/about-us.php -> /home/mysite.example/public_html/about-us.php
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] internal redirect with /home/mysite.example/public_html/about-us.php [INTERNAL REDIRECT]
[08/Jan/2013:17:35:33 +0000] [www.mysite.example/sid#b970c168][rid#b991e190/initial/redir#1] (1) [perdir /home/mysite.example/public_html/] pass through /home/mysite.example/public_html/home
[08/Jan/2013:17:35:34 +0000] [www.mysite.example/sid#b970c168][rid#b9914e08/initial] (1) [perdir /home/mysite.example/public_html/] pass through /home/mysite.example/public_html/favicon.ico

如何阻止它重定向到文件路径,而是让它重定向到

www.site.example/file

php apache mod-rewrite
© www.soinside.com 2019 - 2024. All rights reserved.