如何使用 htaccess 从 url 中删除文件夹名称
Posted
技术标签:
【中文标题】如何使用 htaccess 从 url 中删除文件夹名称【英文标题】:how to remove folder name from url using htaccess 【发布时间】:2013-09-29 03:56:44 【问题描述】:我想更改网址:
http://example.com/Portfolios/iPhone/app
收件人:
http://example.com/iPhone/app
所有网址都一样:
example.com/Portfolios/iPad/app
收件人:
example.com/iPad/app
来自:
example.com/Portfolios/xyz/app
收件人:
example.com/xyz/app
我尝试了很多,但没有什么对我有用。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^Portfolios(/.*|)$ $1 [L,NC]
</IfModule>
【问题讨论】:
知道重定向可以被浏览器缓存可能会有所帮助,我只是在几个小时后才学会的; ***.com/questions/4499541/… 【参考方案1】:启用mod_rewrite
和.htaccess
到httpd.conf
,然后将此代码放入您的.htaccess
DOCUMENT_ROOT
目录下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^Portfolios/(.*)$ /$1 [L,NC,R]
说明: 上面的规则匹配以Portfolios
开头并具有/Portfolios/xyz/app
之类的内容并将xyz/app
放入$1
的URL 模式。它将外部重定向到/$1
,即/xyz/app
。
这些是使用的标志:
L - Last
NC - Ignore (No) Case comparison
R - External redirection (with 302) -- can be changed to R=301
【讨论】:
当我尝试 RewriteRule ^Portfolios(/.*|)$ $1 [L,NC] 没有效果,当我尝试 RewriteRule ^Portfolios(/.*|)$ $1 [L,NC ,R=301] 其重定向文件夹结构为 C:/wamp/www/project... @anytime: 我相信Portfolios
是 DOCUMENT_ROOT 正下方的文件夹,对吗?
@anubhava 是的,伙计,谢谢你的帮助 :),我想同时启用以下网址:domain.com/Portfolios 和 domain.com/iPhone/app(从 domain.com/Portfolios/iPhone/app 重定向)
@anytime: 你能试试这个规则吗:RewriteRule ^Portfolios/(.*)$ /$1 [L,NC,R]
告诉我。
@anubhava,好的。现在http://kristinita.github.io/Portfolios/app.html 成功为我打开,但http://kristinita.github.io/bar/app.html — 404 错误。但问题的作者却提出了相反的问题——http://kristinita.github.io/bar/app.html 文件是打开的。怎么做?谢谢。【参考方案2】:
您还可以将根目录设置为 /var/www/Portfolios 而不是 /etc/apache2/sites-enabled 中的 /var/www/,方法是将 DocumentRoot 行编写为
DocumentRoot /var/www/Portfolios
而不是 文档根目录 /var/www/ 还有这条线 改为
【讨论】:
以上是关于如何使用 htaccess 从 url 中删除文件夹名称的主要内容,如果未能解决你的问题,请参考以下文章
如何使用本地主机的 .htaccess 从 URL 中删除目录名称
从 url (codeigniter) 中删除 index.php 时 .htaccess 防止显示文件