从URL中删除.php

Mys*_*yst 11 php apache .htaccess mod-rewrite

Ubuntu 14.04LTS 32bit

我知道这是一个老问题,但..

我需要它从可见网址中找到它的任何地方删除.php.它需要使用/showthread.php?id=XX --->/showthread?id = XX

我甚至无法与它合作/page.php- > /page.我试过这些:

使用.htaccess删除.php扩展名

如何使用Apache mod_rewrite隐藏.html扩展名

使用htaccess从URL中删除.php

如何停止.htaccess循环

它什么都不做.而其他.htaccess代码工作正常..

<?php 
phpinfo();
Run Code Online (Sandbox Code Playgroud)

列出已加载模块中的mod_rewrite

<?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

返回 Module Available

尝试了更多的东西

# Apache Rewrite Rules
 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

# Add trailing slash to url
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ $1/ [R=301,L]

# Remove .php-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^([^\.]+)/$ $1.php 

# End of Apache Rewrite Rules
 </IfModule>
Run Code Online (Sandbox Code Playgroud)

#

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Run Code Online (Sandbox Code Playgroud)

#

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
Run Code Online (Sandbox Code Playgroud)

这甚至没有任何影响:

RewriteRule ^page$ page.php [L]
Run Code Online (Sandbox Code Playgroud)

sudo service apache2 restart 什么都不改变.

服务器重启不会改变任

我尝试清除其他代码,没有做任何改动.

我清除了浏览器缓存100次

我开始认为它只是讨厌我.有什么可能导致这个?

Asi*_*aza 10

希望有所帮助

它对我有用.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# For LocalHost !.php
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{HTTP_HOST} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=::1

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
Run Code Online (Sandbox Code Playgroud)

  • 如果更多答案有信息性解释而不仅仅是“免费”代码,那就太好了。 (3认同)
  • 做得好!那很有效!添加`Options + FollowSymLinks -MultiViews`让它运转起来 (2认同)
  • [也用完全相同的评论检查我关于这个主题的 4 岁答案](http://stackoverflow.com/a/15940822/548225) :-) (2认同)

Con*_*cho 5

检查此链接.

这是使用.htaccess的答案:

RewriteEngine On

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
Run Code Online (Sandbox Code Playgroud)

在Windows上使用WAMP进行测试并正常工作.