使用htaccess从url中删除.php

编辑:当前.htaccess文件:

Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## hide .php extension snippet # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L] # To internally forward /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*?)/?$ $1.php [L] 

我的网站托pipe在连接到大型托pipe帐户的域的子文件夹中。

 basesite /iioengine /forums /.htaccess //file works /.... //other MyBB content /demos.php /index.php //iioengine.com (homepage) /.htaccess //file doesn't work /... //other iioengine php pages 

是我使用两个不同的htaccess文件的问题?

这是一个需要工作的链接: http : //iioengine.com/demos

我注意到这个当前的htaccess文件也破坏了所有的论坛URL

这不再工作: http : //iioengine.com/forums/Forum-Box2D

编辑:谢谢重新开放,我已经取得了一些进展。 这是我目前的htaccess文件:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d </IfModule> 

我仍然得到404页,但如果我把这一行:

RewriteRule . /index.php [L]

所有非'。PHP'的请求被转发到主页…所以mod_rewrite是肯定启用,它只是不正确的工作。 任何人都知道这个问题可能是什么?

编辑 :这不是重复的 – 没有其他的解决scheme为我工作。 我的问题不是解决scheme存在为什么他们不为我工作 。 没有人能够解决这个问题,我一直在尝试很多解决scheme。 这个论坛的重点不在于解决具体的问题吗?

让我澄清一下…

我有MyBB在子文件夹中运行,其重写工作正常。 例如,这个链接的作品: http : //iioengine.com/forums/Forum-Box2D

所有不是MyBB一部分的PHP页面在其URL中仍然有.php扩展名 – 我试图删除这些但没有任何工作。 例如: http : //iioengine.com/demos

… [原文]

显然有很多关于这方面的信息,但我已经尝试了几十种不同的解决scheme,并没有经过404页面。

这里是我的网站: http : //iioengine.com/ ,所有页面都是php,除了首页和所有论坛页面之外的所有页面都在他们URL的末尾有一个'.php',我想删除它。

除了将非'。php'请求redirect到正确的页面之外,我还想删除'.php'部分,即使它是请求的一部分(因为我的所有内容已经在其中指定了'.php'超链接)。

这是我迄今为止,主要是从这个职位 ,但不起作用,我得到一个404页面。

 RewriteEngine on RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L,QSA] RewriteCond %{REQUEST_URI} ^/(.*).php$ RewriteRule ^(.*)$ %1 [L,QSA] 

在我的htaccess文件中需要什么来在所有情况下从URL中删除文件扩展名? 谢谢

试试这个代码来隐藏.php(将双向工作):

 Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## don't touch /forum URIs RewriteRule ^forums/ - [L,NC] ## hide .php extension snippet # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L] # To internally forward /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ $1.php [L] 

尝试这个。

 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L,QSA] </IfModule> 

如果这不起作用,那么你的服务器没有mod_rewrite激活或支持URL重写。

这是我find的最简单的语法,其结果如下:

 RewriteEngine on RewriteRule ^/?PrivacyPolicy$ legal.php?mode=privacy [NC,L] RewriteRule ^Report/([0-9]+)$ report.php?id=$1 [NC,L] 

结果:

  1. PrivacyPolicy to legal.php?mode = privacy
  2. Report / 55到report.php?id = 55

这应该工作

 Options -Indexes +FollowSymlinks -MultiViews RewriteEngine on DirectoryIndex index.php # REDIRECT Force requests for named index files to drop the index file filename, and force non-www to avoid redirect loop RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^/]*/)*index\.(html?|php[45]?)(\?[^\ ]*)?\ HTTP/ RewriteRule ^(([^/]*/)*)index\.(html?|php[45]?)$ http://example.com/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^/]+)/([^\.]+)\.php\ HTTP/ RewriteRule ^([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com/$1/$2 [R=301,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^/]+)/([^/]+)/([^\.]+)\.php\ HTTP/ RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^.]+)\.php$ http://example.com/$1/$2/$3 [R=301,L] # REDIRECT www to non-wwww RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L] # REWRITE url to filepath RewriteRule ^([a-zA-Z0-9_-]+)/([^/.]+)$ /$1/$2.php [L] RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([^/.]+)$ /$1/$2/$3.php [L] 

在apache 2.4和更高版本上,您可以使用以下END标志的规则从URL删除.php扩展名。

 RewriteEngine on RewriteRule ^(.+)\.php$ /$1 [NC,L,R=301] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+)/?$ /$1.php [END]