使用.htaccess重写文件夹名称

san*_*ers 25 .htaccess rewrite

我想知道是否可以使用.htaccess重写文件夹名称.我的意思是这个.

可以说我有一个网址:

www.site.com/folder1/page.php
Run Code Online (Sandbox Code Playgroud)

现在我想重写网址(例如)

www.site.com/apple/page.php
Run Code Online (Sandbox Code Playgroud)

folder1是我的网站空间上的现有文件夹.

重要的是:"苹果"不是一个文件夹,而只是一个名字!

好的,这是一步一步的计划:

  1. 用户类型 www.site.com/folder1/login.php
  2. 网址应该重写,而不是重定向网址 www.site.com/apple/login.php

这意味着它apple只是一个名称而不是目录.所有代码都应该来自folder1.苹果应该只是一个别名folder1.我不能只重命名folder1Apple.为此我只想改写folder1apple.

Gum*_*mbo 47

mod_rewrite只能重写/重定向请求的URI.因此,您需要请求/apple/…将其重写为相应的/folder1/….

试试这个:

RewriteEngine on
RewriteRule ^apple/(.*) folder1/$1
Run Code Online (Sandbox Code Playgroud)

此规则将重写/apple/…内部以URI路径开头的每个请求/folder1/….


编辑     因为您实际上正在寻找另一种方式:

RewriteCond %{THE_REQUEST} ^GET\ /folder1/
RewriteRule ^folder1/(.*) /apple/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

此规则旨在与上述其他规则一起使用.请求/folder1/…将被外部重定向,/apple/…然后请求/apple/…将被内部重写回/folder1/….


Jos*_*osh 5

尝试:

RewriteRule ^/apple(.*)?$ /folder1$1 [NC]
Run Code Online (Sandbox Code Playgroud)

您希望在网址中显示的文件夹位于语句的第一部分中 - 这是它将匹配的内容,第二部分将其"重写"到您现有的文件夹中.[NC]标志意味着它将忽略大小写差异,例如Apple /仍将转发.

请参阅此处获取教程:http://www.sitepoint.com/article/guide-url-rewriting/

还有一个很好的Windows测试实用程序可以从这里下载:http : //www.helicontech.com/download/rxtest.zip 只需要注意测试人员你需要省略域名 - 所以测试将是针对/folder1/login.php

从/ folder1重定向到/ apple试试这个:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]
Run Code Online (Sandbox Code Playgroud)

重定向然后重写只需在htaccess文件中组合上面的内容:

RewriteRule ^/folder1(.*)?$ /apple$1 [R]
RewriteRule ^/apple(.*)?$ /folder1$1 [NC]
Run Code Online (Sandbox Code Playgroud)