首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当另一个htaccess位于子文件夹中时,URL重写不起作用

问当另一个htaccess位于子文件夹中时,URL重写不起作用
EN

Stack Overflow用户
提问于 2013-01-14 15:22:15
回答 2查看 1.9K关注 0票数 2

我的站点根目录中有一个.htaccess文件。在文件中,我有一个代码重定向所有通信量以添加“www”。到网址的开头:

代码语言:javascript
复制
Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]

这对95%的网站来说是很好的。但是,我有一个子目录website.com/playdate,它在文件夹中有另一个.htaccess文件。在这个.htaccess文件中有以下代码,可以将URL重定向到更干净的地方:

代码语言:javascript
复制
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^page/([0-9]+)/ index.php?page=$1

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)/ view.php?url_slug=$1

这段代码似乎覆盖了www重定向。我试过添加初始代码,

代码语言:javascript
复制
Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]

到辅助.htaccess的顶部,但这不起作用。

如何使子目录继续转发到“www”。站点的版本,同时也保留该子文件夹的辅助.htaccess规则?

EN

回答 2

Stack Overflow用户

发布于 2013-01-14 16:15:49

例如,当请求发出时,首先发生的事情是进行文件映射的URL,然后apache检查该文件映射(在本例中映射到一个目录)是否包含htaccess文件。如果没有,则会检查父目录中的htaccess文件。如果是这样的话,那么它只是使用该目录中的htaccess文件。

因此,当请求/playdate时,它在该目录中有一个htaccess文件,所以apache不会在任何父目录中查找。只应用这一个htaccess文件,任何位于父目录中的文件都会被忽略。

如果您使用的是Apache2.2,那么您只需复制www重定向规则,但是您需要调整它们,因为您的规则不再在文档根目录中。将这些规则添加到htaccess文件的顶部(或者至少,在您已经拥有的任何规则之上):

代码语言:javascript
复制
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^website.com [NC] 
RewriteRule ^(.*)$ http://www.website.com/playdate/$1 [L,R=301]

如果您使用的是Apache2.4,则有一个特定的选项可以应用于播放日期目录中的htaccess文件:

代码语言:javascript
复制
RewriteOptions InheritBefore

因此,父作用域中的任何规则都是在子作用域中的任何规则之前继承的。这一点很重要,因为您需要确保www重定向规则在应用之前发生,否则URI就会损坏。Apache2.2也有一个类似的选项,Inherit,但是这些选项都是放在之后的子作用域中的任何规则。

票数 2
EN

Stack Overflow用户

发布于 2013-12-03 22:04:35

我认为你的问题是当你重写整个域名时使用的L标志。

代码语言:javascript
复制
[L,R=301]

L标志的意思是“最后一次”,如“这是我希望服务器处理这个URI请求的最后一次重写指令。”如果用户代理请求"http://website.com/playdate",则重写条件将触发行

代码语言:javascript
复制
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]

服务器将将请求重写到http://www.website.com/playdate,并停止处理该URI请求的重写规则,因为服务器到达了L标志。

至少这是我的猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14321269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档