繁体   English   中英

.htaccess隐藏.PHP并重写URL

[英].htaccess hide .PHP and rewrite URL

我已经设置了一个.htaccess文件来重写URL example.com/foo example.com/foo.php如果它以.php结尾,我可以分别获取URL重定向到error.php ,但是我不能似乎两者都在一起。

我看到其他网站隐藏了.php,我想了解如何做到这一点。

这是我尝试过的:

//.htaccess file

RewriteEngine On    # Turn on the rewriting engine
RewriteRule    ^([A-Za-z0-9-_]+)/?$    $1.php    [NC,L]
RewriteRule    ^([A-Za-z0-9-_]+).php?$    error.php    [NC,L]

笔记

这对我有用。 我不确定它是否一定有必要供大家参考。

    RewriteEngine On

    RewriteRule (.*)index$ http://%{HTTP_HOST}/error [R=404]
    RewriteCond %{THE_REQUEST} ^\w+\ /(.*)\.php(\?.*)?\ HTTP/
    RewriteRule ^ http://%{HTTP_HOST}/error [R=301]
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule .* $0.php
    ErrorDocument 404 /error.php 
    ErrorDocument 301 /error.php 

考虑到您对自己的问题的评论,这似乎是您正在寻找的内容:如果请求将某对象定位到具有相同名称但添加了.php文件扩展名的php脚本,则在内部进行重写。 如果请求资源在文件系统中不直接存在,则在所有其他情况下都重写为/error.php

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /error.php [L]

还有一个一般性提示:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不是使用动态配置文件(“ .htaccess”)。 众所周知,这些文件容易出错,难以调试,并且确实降低了服务器的速度。 仅当您无法控制主机配置(阅读:真正便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这显然是安全噩梦)时,才提供它们作为最后的选择。 )。

我使用以下两个规则来做到这一点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM