通过 htaccess 为单个子目录提供多个名称

通过 htaccess 为单个子目录提供多个名称

主要情景(需要答案)

如果我的网站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

相关内容