繁体   English   中英

PHP —使用.htacess重写规则来隐藏URL中的文件夹名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM