我正在做一个小的PHP个人项目以获得乐趣,我需要帮助我的重写规则。我的目标是在我的网址中完全隐藏文件夹名称。
这是我已经得到的:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/my-app/
RewriteRule ^(.*)$ /my-app/$1 [L]
</IfModule>
这很好用,我不需要在URL中指定my-app文件夹,但是当我重定向到另一个页面时,会再次显示文件夹名称。我该怎么做才能指定在请求my-app文件夹时将其隐藏在URL中。提前致谢。
答案 0 :(得分:0)
尝试将此规则添加到您的htaccess文件中:
RewriteCond %{THE_REQUEST} \ /+my-app/
RewriteRule ^my-app/(.*)$ /$1 [L,R=301]
这会将/my-app/
中的任何直接请求重定向到已删除的网址。
答案 1 :(得分:0)
这是我在本地应用中的测试和工作示例
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
要获取网址只需使用$ _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]