问题 从URL中删除.php


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();

列出已加载模块中的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>

返回 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>

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

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

这甚至没有任何影响:

RewriteRule ^page$ page.php [L]

sudo service apache2 restart 什么都不改变。

服务器重启不会改变任

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

我清除了浏览器缓存100次

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


9126
now


起源

这可能是你想要匹配的东西。您是否尝试在浏览器中使用此功能? showthread?id=XX RewriteRule无法匹配查询字符串。所以这可能就是为什么它不起作用。你的主要目标是什么? - Panama Jack
你看到这个问题了吗? stackoverflow.com/questions/21617506/... - starkeen
那个答案对我没有任何影响。我只是检查example.com/page(返回404)和example.com/page.php(显示.php但有效)。如果有效,我已经很高兴了.. - Myst
我想我永远都会与.php保持一致:/ - Myst
@anubhava它位于php文件所在的子文件夹中。无论如何,我现在已经找到了Rao Asif Raza的解决方案。谢谢 - Crimbo


答案:


希望有所帮助

它对我有用。

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]

6
2018-02-23 22:02



做得好!那很有效!添加 Options +FollowSymLinks -MultiViews 让它工作 - Crimbo
@myst你能试试这个解决方案,如果有效,请将其标记为已接受的答案? - Crimbo
另外,请查看关于此主题的4年回答,并提供完全相同的评论 :-) - anubhava
如果更多的答案有信息解释而不仅仅是“免费”代码,那将会很好。 - Justin


检查 这个链接

这是使用.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]

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


5
2018-02-23 16:29



适用于xampp的好例子
是否有可能没有路由到网站的根目录?我把所有的php文件放在一个子文件夹中 - Crimbo
试试吧 RewriteBase /subfolder - Condorcho
或者,试着把 .htaccess 在你想要的子文件夹中。 - Condorcho
我试过了 RewriteBase,但重写本身不起作用。无论如何,我现在已经找到了Rao Asif Raza的解决方案。谢谢 - Crimbo


尝试这样从您的文件中完全删除.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。


2
2018-02-23 12:10



即使在编写了正确的RewriteBase之后,它也无法正常工作 - 访问没有'.php'扩展名的页面时仍然会收到'404 Not Found'错误 - Crimbo
抱歉耽搁了。刚刚检查了我的实时网站htaccess文件,以下代码正在为它工作。 RewriteEngine On RewriteBase / RewriteRule ^ index \ .php $ - [L] RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule。 /index.php [L] - Siddhesh
我担心这不起作用。而且,我试图重写的不是'index.php' - Crimbo
我现在发现Rao Asif Raza的解决方案有效。你的解决方案刚刚丢失 Options +FollowSymLinks -MultiViews。感谢您的帮助! - Crimbo
哦!感谢更新 - Siddhesh


热门问题

不使用eval / new函数的JavaScript模板库 当涉及内部类时,Java继承如何工作 .NET Windows服务的奇怪问题 在.ipa或.app下查找App ID 快速入门XSLT参考[关闭] 如何找出Android应用程序中未使用的资源 Ruby中并发的同步方法[重复] 将std :: chrono :: system_clock :: time_point转换为struct timeval并返回 Google Drive API V3(javascript)更新文件内容 Bootstrap 3.0 - 将元素推到底部 受密码保护的.NET ClickOnce部署? 如何用postgresql安装wordpress coq Set或Type如何成为命题 硒滚动元素进入(中心)视图 在Spring Transaction JUnit测试中自动装配Hibernate会话的正确方法 Git的Dockerfile策略 如何在FOS_PICKFOLDER中使用IFileDialog,同时仍在对话框中显示文件名 在Firefox扩展中复制Google Chrome浏览器操作弹出效果 CakePHP找到MAX 芹菜 - 完成任务的召唤功能 从使用fmemopen创建的流中读取宽字符 .NET是否为每个程序集创建一个字符串实习池? DefaultModelBinder不绑定嵌套模型 Navigator.MediaDevices.getUserMedia()使用了哪些相机通信标准? 选择命名空间名称时应该知道什么? cout Swagger Codegen CLI Java客户端 - 如何正确使用它 一个很好的哈希函数用于采访整数,字符串? Maven 3 ciManagement配置的目的是什么? 如何通过语言文化获取代码页?