是的,我已阅读Apache手册并在此处进行了搜索。出于某种原因,我根本无法让这个工作。我最接近的是删除扩展名,但它指向根目录。我希望这只是在包含.htaccess
文件的目录中工作。
我需要使用.htaccess
文件做三件事。
我需要它来删除.php
一个。我有几个页面使用标签,URL看起来像page.php #tab - 这可能吗?
湾我有一个页面使用会话ID附加到网址,以确保您来自正确的地方,www.domain.com/download-software.php?abcdefg
。
这可能吗?另外,在执行此操作时,是否需要从头文件导航包含文件中的链接中删除“.php”?应IE "<a href="support.php">support</a>" be <a href="support">support</a>?
domain.com
,而是www.domain.com/page
。我会继续寻找,尝试等等。会在子目录中导致任何问题吗?
答案 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)中将参数None
从All
更改为/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]
答案 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
这就是你所需要的:
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]