我有一个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文件中添加一些代码来完成我提到的任务。请说明需要做什么。
提前致谢。
答案 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)你完成了你想要的东西
希望这有帮助。