主要情景(需要答案)
如果我的网站http://website.com
有多个子目录:
/features/
。/articles/
。/projects/
其中包含任意数量的文件和文件夹;
有没有办法改变前导目录的名称?
例如:
http://website.com/content/features/( ... )
Becomes
http://website.com/public/features/( ... )
AND
http://website.com/private/features/( ... )
--
前一场景( 等候接听 )
假设我有一个在 上托管的网站http://website.com
。
例如,我想在网站的子部分添加一些个性化项目/extra/
。
因此,假设我有:
/extra/feature.php?subject=( a childrens cartoon )
/extra/article.php?subject=( fetish photography project )
/extra/ebook.php?subject=( local golfing borchure )
有没有办法将别名应用于extra
目录,以便它变成两个或多个其他名称?例如:
/extra/feature.php?subject=( a childrens cartoon )
Becomes
/public/feature.php?subject=( a childrens cartoon )
And
/private/feature.php?subject=( a childrens cartoon )
我认为这是可能的htaccess
?
答案1
你.htaccess
可以使用 mod_rewrite 来内部重写/public/
从到 的URL /extra/
。
例如,若要仅重写以下形式的 URL,您可以在文档根目录中的文件.../feature.php?subject=<something>
中执行以下操作:.htaccess
RewriteEngine On
RewriteCond %{QUERY_STRING} ^subject=[^&]+
RewriteRule ^(?:public|private)/(feature\.php)$ /extra/$1 [L]
这将匹配格式为/public/feature.php?subject=<something>
或的 URL,/private/feature.php?subject=<something>
并将请求重写为/extra/feature.php?subject=<something>
。这是内部重写,地址栏中的 URL 不会改变。
in?:
使(?:public|private)
子模式不被捕获,因为我们在代换字符串(又名目标 URL)。
(feature\.php)
- 这是一个捕获子模式,在代换使用$1
反向引用。这只会节省输入(和潜在错误)。但是,您也可以将article.php
和组合ebook.php
在一起,使用单个指令来处理所有三个实例。
该RewriteCond
指令是匹配查询字符串所必需的。仅RewriteRule
匹配 URL 路径。
默认情况下,请求的 URL 中的查询字符串会传递到目标 URL,因此您不需要对查询字符串执行任何操作。
答案2
解决方案Scenario 1
只是将两行代码放在.HTACCESS
文件的根目录中http://website.com
。
代码如下:
RewriteEngine on
RewriteRule ^(?:public|private)/(.*) extra/$1
现在,访问http://website.com/extra/(directory)
、http://website.com/public/(directory)
或http://website.com/private/(directory)
都将显示相同的目标文件。
任何其他情况/name/
都会导致error 404
。