重写URL并隐藏子页面名称

时间:2017-03-30 10:35:46

标签: regex .htaccess

我的.htaccess文件中有一个重写,可以将例子从example.com发送到example.com/home

RewriteEngine On
RewriteBase /
RewriteRule ^$ home [L,R=301]

如何执行此操作,然后从网址栏中删除字符串“home”,使其显示为example.com?我对家里的任何子目录都不感兴趣,因为网站的其他部分都存在于根目录中。

完整背景

# Perch Runway
<IfModule mod_rewrite.c>

# Turn on RewriteEngine
RewriteEngine On

# When user goes to the home page send to .com/home and strip /home
RewriteBase /
RewriteRule ^$ home [L,R=301]

# Cache Busting
RewriteRule (assets[/])([^.]*).min.+.(css|js)$ $1$2.min.$3

# Perch Runway
RewriteCond %{REQUEST_URI} !^/login
RewriteCond %{REQUEST_URI} !(/sub-directory-one|/sub-directory-two) [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /login/core/runway/start.php [L]
</IfModule>

2 个答案:

答案 0 :(得分:2)

使用以下规则,

RewriteEngine On
RewriteBase /
RewriteRule !home /home%{REQUEST_URI} [L]

答案 1 :(得分:1)

当您使用R|redirect标志时,Apache会向客户端发送重定向状态。然后,客户端请求新网址(例如http://www.example.com/home)并显示新网址。

要避免此行为,您不会发送重定向(例如R),而是在内部静默重写到新网址。这样Apache就可以在不通知客户端的情况下发送目标的内容。

要从/内部重写为/home,请保留现有规则,但删除R标记

RewriteRule ^$ /home [L]