【问题标题】:Hide .php extension in ALL subdirectories with .htaccess使用 .htaccess 在所有子目录中隐藏 .php 扩展名
【发布时间】:2013-07-19 14:30:30
【问题描述】:

我试图在我的页面上为所有带有 .htaccess 的子目录隐藏 .php 扩展名。

目前我有

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]

它在普通页面上工作得很好,但是文件夹中的任何页面都会给我一个 500 内部服务错误。一个示例 URL 将是

http://www.motorcityline.com/portfolio/michigantinting

实际上是 /portfolio/michigantinting.php。 .php 文件确实存在,只是我没有正确配置 .htaccess 文件。

【问题讨论】:

  • 您是否先在 Stack Overflow 甚至 Google 上搜索该查询?
  • ............ 是吗?我花了几个小时尝试不同的规则,没有一个会起作用。这不是问问题的重点吗?
  • 但只是一个问题:motorcityline.com/portfolio/michigantinting.php 文件真的存在吗?
  • @Smashbox 但这是一个常见的查询,之前已经回答了数百次,我不明白为什么,如果你搜索过,你会遇到问题。仅 Stack Overflow 就有多种解决方案。
  • 马丁我请你有建设性。如果您看不到,目前有几个人在帮助我,但我仍然遇到问题。它不像“google it”那么简单。如前所述,我已经实现了堆栈溢出主题中的解决方案,但没有成功。如果您对手头的问题有任何建议,我愿意听取他们的意见,否则,祝您有美好的一天。

标签: .htaccess


【解决方案1】:

用此代码替换您的 .htaccess:

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

# add www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]

【讨论】:

  • 我真的很喜欢自动删除 .php 的方式,但是由于某些奇怪的原因,我在现有页面上得到了 404。例如motorcityline.com/services.php
  • 只要将上面的 .htaccess 放在 $DOCUMENT_ROOT 中就可以了。你把它放在哪里了?
  • 它位于我的 GoDaddy 托管计划的根目录中。子目录正在使用此代码,但是我根目录中的 .php 文件给了我一个 404
  • 嗯,很奇怪,尝试评论这一行:RewriteCond %{DOCUMENT_ROOT}/$1.php -f 看看是否有帮助
  • Negative ;( 评论时我仍然收到 404 和额外的 500 内部服务器错误
【解决方案2】:

试试这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://www.%{SERVER_NAME}%{REQUEST_URI} [R=301]

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

【讨论】:

  • 感谢 Lucas Willems,为 /portfolio/michigantinting 工作,但现在任何正常页面都会出现 500 错误。举个例子。 “motorcityline.com/work”现在不起作用。
  • 几乎相同的结果。我现在收到一个 404 和一个额外的 500 Internal Server Error 错误。这些页面确实存在。
  • motorcityline.com/work.php 可以正常工作,但 /work 没有 .php
猜你喜欢
  • 2015-07-27
  • 2011-07-28
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
相关资源
最近更新 更多