【问题标题】:Mod rewrite not working on apache2Mod重写不适用于apache2
【发布时间】:2014-11-27 17:25:36
【问题描述】:

我在 apache2 服务器上工作。我正在尝试使用以下 .htaccess 文件在我的网站上显示没有文件扩展名 .php 的网页:

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


# 1 ---- Establish a custom 404 File not Found page ----

ErrorDocument 404 /filenotfound.php

# 2 ---- Prevent directory file listing in all of your folders ----

IndexIgnore *

它根本不起作用。我仍然在浏览器中看到带有 .php 扩展名的网页。

我已经加载了 mod rewrite 模块,并且我在 apache2.conf 文件中进行了如下更改:

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

我的 .htaccess 文件也在做其他工作(即将 404 重定向到 filenotfound.php )没有任何问题。那么为什么这个重写规则不起作用呢?我怎样才能调试 .htaccess 文件?

【问题讨论】:

  • 调试您的 htaccess 使用:htaccess.madewithlove.be 编辑,啊请求文件名不支持 atm - 但用于一般调试问题的好工具。

标签: apache .htaccess


【解决方案1】:

我仍然在浏览器中看到带有 .php 扩展名的网页。

好吧,您甚至没有将带有.php 的请求重定向到没有它的 URL 的规则。

你的规则是这样的:

# 1 ---- Establish a custom 404 File not Found page ----    
ErrorDocument 404 /filenotfound.php

# 2 ---- Prevent directory file listing in all of your folders ----    
IndexIgnore *
RewriteEngine On

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

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

【讨论】:

  • 感谢您的帮助。它现在显示没有文件扩展名的 url。 :) 但它说的是文件未找到。所以我想要的是当我打开 /dir/file.php 时,浏览器将 url 显示为 /dir/file,但它仍然显示实际的 /dir/file.php。我在这里很困惑。
  • 这段代码已经做到了这两点。只需确保将这段代码放在DocumentRoot 中,而不是放在任何子目录中。
  • 嗯,它只为我完成了一半的任务。我尝试删除代码的最后一部分,它仍然完成了一半的任务(即重写没有 .php 的 url)但之后它试图找到一个扩展名为 .html 的文件,即它正在寻找 /dir/file.html显示,如果它不存在,那么 404 即将到来。那么,我们可以让它找到 /dir/file.php 而不是 /dir/file.html
  • 您在我的规则中哪里看到了 .html?
  • 事实上,您甚至可以保留问题中显示的最后一条规则,代替我在 URL 中添加 .php 的最后一条规则。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 2021-06-19
  • 2015-11-29
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
相关资源
最近更新 更多