PHP - 使用.htaccess重写规则隐藏URL中的文件夹名称

时间:2014-08-11 23:07:12

标签: php .htaccess codeigniter mod-rewrite

我正在做一个小的PHP个人项目以获得乐趣,我需要帮助我的重写规则。我的目标是在我的网址中完全隐藏文件夹名称。

这是我已经得到的:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_URI} !^/my-app/
   RewriteRule ^(.*)$ /my-app/$1 [L]
</IfModule>

这很好用,我不需要在URL中指定my-app文件夹,但是当我重定向到另一个页面时,会再次显示文件夹名称。我该怎么做才能指定在请求my-app文件夹时将其隐藏在URL中。提前致谢。

2 个答案:

答案 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]