我的站点根目录中有一个.htaccess文件。在文件中,我有一个代码重定向所有通信量以添加“www”。到网址的开头:
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重定向到更干净的地方:
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重定向。我试过添加初始代码,
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^website.com [NC]
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]到辅助.htaccess的顶部,但这不起作用。
如何使子目录继续转发到“www”。站点的版本,同时也保留该子文件夹的辅助.htaccess规则?
发布于 2013-01-14 16:15:49
例如,当请求发出时,首先发生的事情是进行文件映射的URL,然后apache检查该文件映射(在本例中映射到一个目录)是否包含htaccess文件。如果没有,则会检查父目录中的htaccess文件。如果是这样的话,那么它只是使用该目录中的htaccess文件。
因此,当请求/playdate时,它在该目录中有一个htaccess文件,所以apache不会在任何父目录中查找。只应用这一个htaccess文件,任何位于父目录中的文件都会被忽略。
如果您使用的是Apache2.2,那么您只需复制www重定向规则,但是您需要调整它们,因为您的规则不再在文档根目录中。将这些规则添加到htaccess文件的顶部(或者至少,在您已经拥有的任何规则之上):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^website.com [NC]
RewriteRule ^(.*)$ http://www.website.com/playdate/$1 [L,R=301]如果您使用的是Apache2.4,则有一个特定的选项可以应用于播放日期目录中的htaccess文件:
RewriteOptions InheritBefore因此,父作用域中的任何规则都是在子作用域中的任何规则之前继承的。这一点很重要,因为您需要确保www重定向规则在应用之前发生,否则URI就会损坏。Apache2.2也有一个类似的选项,Inherit,但是这些选项都是放在之后的子作用域中的任何规则。
发布于 2013-12-03 22:04:35
我认为你的问题是当你重写整个域名时使用的L标志。
[L,R=301]L标志的意思是“最后一次”,如“这是我希望服务器处理这个URI请求的最后一次重写指令。”如果用户代理请求"http://website.com/playdate",则重写条件将触发行
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301]服务器将将请求重写到http://www.website.com/playdate,并停止处理该URI请求的重写规则,因为服务器到达了L标志。
至少这是我的猜测。
https://stackoverflow.com/questions/14321269
复制相似问题