使用.htaccess删除.php扩展名

时间:2010-10-26 17:01:44

标签: .htaccess

是的,我已阅读Apache手册并在此处进行了搜索。出于某种原因,我根本无法让这个工作。我最接近的是删除扩展名,但它指向根目录。我希望这只是在包含.htaccess文件的目录中工作。

我需要使用.htaccess文件做三件事。

  1. 我需要它来删除.php

    一个。我有几个页面使用标签,URL看起来像page.php #tab - 这可能吗?

    湾我有一个页面使用会话ID附加到网址,以确保您来自正确的地方,www.domain.com/download-software.php?abcdefg

  2. 这可能吗?另外,在执行此操作时,是否需要从头文件导航包含文件中的链接中删除“.php”?应IE "<a href="support.php">support</a>" be <a href="support">support</a>?

    1. 我希望在每个网址之前强制使用“www”,因此它不是domain.com,而是www.domain.com/page
    2. 我想从页面中删除所有尾部斜杠。
    3. 我会继续寻找,尝试等等。会在子目录中导致任何问题吗?

16 个答案:

答案 0 :(得分:102)

Gumbo在Stack Overflow问题 How to hide the .html extension with Apache mod_rewrite 中的回答应该可以正常工作。

重新1)将.html更改为.php

重新a。)是的,这是可能的,只需将#tab添加到网址即可。

Re b。)可以使用QSA(查询字符串追加),见下文。

应该也可以在子目录路径中工作:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]

答案 1 :(得分:67)

答案 2 :(得分:40)

除了上面的其他答案,

您也可以尝试将此文件从文件中删除.php扩展名,并避免无限循环

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

此代码适用于Root / .htaccess, 如果要将其放在子目录中的htaccess文件中,请务必更改RewriteBase。

编辑:

在apache 2.4及更高版本中,您还可以使用END标志来防止无限循环错误。以下示例与apache 2.4,

上的相同
RewriteEngine on

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

答案 3 :(得分:21)

以下代码适用于我:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

答案 4 :(得分:12)

如果您只想为一个特定文件执行此操作,请使用以下方法:

RewriteRule ^about$ about.php [L]

参考:http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/

答案 5 :(得分:9)

AllowOverride(Debian 8)中将参数NoneAll更改为/etc/apache2/apache2.conf后,this后,.htaccess文件必须包含:

Options +MultiViews
AddHandler php5-script php
AddType text/html php

这足以隐藏文件中的.php扩展名

答案 6 :(得分:5)

不确定为什么其他答案对我不起作用,但我找到的代码确实如此:

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

这就是我的htaccess中所有内容,example.com / page显示了example.com/page.php

答案 7 :(得分:5)

我最终得到了以下工作代码:

RewriteEngine on 
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

答案 8 :(得分:3)

要从PHP文件中删除.php扩展名,例如yoursite.com/about.php到yoursite.com/about请按照以下步骤操作。 从您网站的根目录打开.htaccess(如果不存在,则创建一个新文件)文件,并添加以下代码。

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

要从.html文件中移除.html扩展程序,例如yoursite.com/about.html到yoursite.com/about请按照以下步骤操作。

从您网站的根目录打开.htaccess(如果不存在,则创建一个新文件)文件,并添加以下代码。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

参考:How to Remove php Extention from URL

答案 9 :(得分:2)

如果您使用PHP进行编码并想删除.php,那么您可以使用以下网址:

http://yourdomain.com/blah - &gt;这指向/blah.php

这就是你所需要的:

<IfModule mod_rewrite.c>
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

答案 10 :(得分:2)

以下是我用来隐藏文件名中 .php 扩展名的代码:

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

注意:R=301用于永久重定向,建议用于搜索引擎优化目的。但是,如果只需要临时重定向,则只需使用R

替换它

答案 11 :(得分:1)

如果你的PHP中的网址如http://yourdomain.com/demo.php那样   http://yourdomain.com/demo

这就是你所需要的:

创建文件.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^\.]+)$ $1.html [NC,L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

答案 12 :(得分:1)

我找到了100%的工作概念:

# Options is required by Many Hosting
Options +MultiViews

RewriteEngine on

# For .php & .html URL's:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1.html [NC,L]

在您的网站.htaccess文件的Root中使用此代码,如:

离线 - wamp \ www \ YourWebDir

在线 - public_html /

  

如果它无法正常工作,请更改Wamp的设置   服务器:1)左键单击WAMP图标2)Apache 3)Apache模块4)左   单击rewrite_module

答案 13 :(得分:1)

尝试一下
以下代码肯定会有效

RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

答案 14 :(得分:1)

尝试

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

答案 15 :(得分:0)

试试这个:-

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]