隐藏网站访问者的真实网址

时间:2017-04-16 12:13:42

标签: php .htaccess mod-rewrite

我有一个php网站。各种页面分布在各种目录中。现在,当我尝试将链接发送给用户的任何页面时,我必须添加一些网址,例如"www.mydomain.com/collection/latest/requestpage.html""www.mydomain.com/api/get/someapi.php"。但是这个URL太复杂了。我希望通过"www.mydomain.com/collection/requestpage""www.mydomain.com/someapi"等网址引用网页,并在浏览器的网址栏中显示相同的地址。

因此,加载"www.mydomain.com/collection/requestpage"会将用户带到"www.mydomain.com/collection/latest/requestpage.html",加载"www.mydomain.com/someapi"会将用户带到"www.mydomain.com/api/get/someapi.php"

所以,

1)我希望从URL中隐藏实际的目录结构,

2)我想隐藏正在加载的页面的文件类型扩展名,并

3)访问指定页面时,在浏览器的地址栏中显示此修改后的URL。

我知道这可以使用.htaccess文件完成,但我以前从未写过这样的内容。我的目录中有一个.htaccess文件,它将任何进入“mydomain.com”的请求重定向到“www.mydomain.com”。我想在这个htaccess文件中添加一些代码来完成我提到的任务。请说明需要做什么。

提前致谢。

1 个答案:

答案 0 :(得分:0)

1)从URL中删除目录只需将以下代码添加到.htaccess文件

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^FOLDER_NAME/ FOLDER_NAME%{REQUEST_URI} [L,NC]

使用您的实际文件夹名称更改FOLDER_NAME

2)从URL中删除扩展使用以下代码

RewriteEngine on
RewriteBase /

for html

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

for php

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]

编辑:在处理POST请求时,您必须更改RewriteRule,如下所示

RewriteRule ^ %1 [R=307,L]

3)你完成了你想要的东西

希望这有帮助。