[英]PHP — Using .htacess rewrite rules to hide folder name in URL
我正在做一个有趣的小型php个人项目,我的重写规则需要帮助。 我的目标是在我的URL中完全隐藏文件夹名称。
这是我已经得到的:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/my-app/
RewriteRule ^(.*)$ /my-app/$1 [L]
</IfModule>
一切正常,我不需要在URL中指定my-app文件夹,但是当我重定向到另一个页面时,文件夹名称会再次显示。 当请求my-app文件夹时,该怎么做才能将其隐藏在URL中。 提前致谢。
尝试将此规则添加到您的htaccess文件中:
RewriteCond %{THE_REQUEST} \ /+my-app/
RewriteRule ^my-app/(.*)$ /$1 [L,R=301]
这会将/my-app/
对任何内容的任何直接请求重定向到已删除的URL。
这是我在本地应用程序中经过测试的有效示例
RewriteEngine on
RewriteBase /
# Add trailing slash
RewriteCond %{REQUEST_URI} !(\.|/$)
RewriteRule (.*) http://%{HTTP_HOST}/$1/ [R=302,L]
RewriteCond %{QUERY_STRING} !^qs
RewriteRule ^my-app(.*)$ $1 [R=302,L]
RewriteCond %{REQUEST_URI} !^/my-app/
RewriteRule ^(.*)/$ my-app/?qs=$1 [L,QSA]
这就是我重定向到的方式
domain.com/subcat
网址是
domain.com/my-app/subcat
我有查询字符串qs
来避免像这样的重定向:
domain.com/?qs=subcat
要获取URL,只需使用$ _GET var
var_dump($_GET);
产量
array (size=1)
'qs' => string 'subcat' (length=3)
如果适用,将R=302
替换为R=301
编辑:
没有查询字符串qs
更好的解决方案
# Avoid redirect loop
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
# Add trailing slash
RewriteCond %{REQUEST_URI} !(\.|/$)
RewriteRule (.*) http://%{HTTP_HOST}/$1/ [R=302,L]
RewriteRule ^my-app(.*)$ $1 [R=302,L]
RewriteCond %{REQUEST_URI} !^/my-app/
RewriteRule ^(.*)/$ my-app/$1 [L,QSA]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.