【问题标题】:.htaccess Hide File Extension Not Working (WampServer).htaccess 隐藏文件扩展名不起作用(WampServer)
【发布时间】:2013-02-03 09:48:58
【问题描述】:

我在我的网站上隐藏 .html 扩展时遇到了一些问题。 我正在使用 Apache V.2.2.22 在 WampServer 上运行。 rewrite_module 处于活动状态,我已将 httpd.conf 文件更改为 AllowOverride all

这是我所知道的唯一一个 htaccess 文件,这就是它所包含的全部...

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L,NC]
</IfModule>

它不起作用,我不知道为什么...这是我的 httpd.conf 文件

DocumentRoot "c:/wamp/www/"

<Directory />
    Options FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
</Directory>

<Directory "c:/wamp/www/">
    Options Indexes FollowSymLinks
    AllowOverride all

#   onlineoffline tag - don't remove
    Order Allow,Deny
    Allow from all

</Directory>

这是我放置.htaccess 文件的地方...

E:\wamp\www\DesktopVersion\.htaccess

任何关于为什么这不起作用的建议都会很棒!

编辑:只是为了澄清这是要使用的正确 .htaccess 代码... 'anubhava'的补充

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
</IfModule>

【问题讨论】:

  • 只要您有第二个目录块为您的 Web 根目录设置 Allow Override All(并且您正在访问的文件在该文件夹中而不是主根目录中),根目录上的 Allow Override None( /) 不会有问题。您是否尝试过删除 标记的 htaccess 文件?很高兴知道它是否只是因为未通过此测试而被绕过。
  • 您好,感谢您的评论。我不确定你的意思,所以我在我的问题中添加了更多的 httpd.conf 文件。此外,我已将 Apache 的版本更改为最新版本。如果您可以重新阅读我的问题,看看是否有任何问题,那就太好了。谢谢一堆,克里斯Edit: I tried to take the &lt;ifModule&gt; Tags out and still nothing:/
  • 您能否在您的 htaccess 文件中放入一些垃圾,并检查您是否收到此问题的答案 (stackoverflow.com/questions/9234289/…) 中建议的 500 响应,以验证您的 htaccess 文件是否正在被使用?
  • 好的,我这样做了,我确实收到了 500 错误,所以它正在读取文件...现在怎么办?
  • 当你说这段代码不起作用时,你的意思是你正在输入,比如www.mysite.com/index.html,它没有变成www.mysite.com/index?或者当你去www.mysite.com/index它给你一个404?

标签: .htaccess mod-rewrite wampserver file-extension


【解决方案1】:

您应该将此代码附加到您的 .htaccess 中:

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

# To internally forward /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]

【讨论】:

  • 我试过了,但它给了我 500 错误?奇怪的是,一旦我把它绑起来,然后又恢复了;原始代码有效吗?无论如何,干杯似乎以某种方式解决了我的问题:L
  • aww damm 它在其他浏览器中不起作用...现在该怎么办?您的代码似乎可以正常工作,因为它最后摆脱了 .html 但随后出现 500 错误?
  • 在您的问题中粘贴您最新的 .htaccess,然后我可以建议您在那里解决什么问题。
  • 好的,我没有要求你删除现有的 Rewrite 代码(这就是我写 append 的原因)。您还需要现有的规则。
  • 哦,对了,误会了。新的答案很完美!非常感谢您的帮助
猜你喜欢
  • 2014-03-29
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2017-10-06
  • 1970-01-01
  • 2012-07-04
相关资源
最近更新 更多