我有一个关于使用多个.htaccess文件的问题 - 在查找stackoverflow上的其他地方之后我找不到答案,所以我希望你们能提供帮助。
我目前在我的网站的根目录中有一个.htaccess文件,它执行一个简单的网址重写:
Options -MultiViews
# CheckSpelling off
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?url=$1 [L]
ErrorDocument 404 /index.php
我目前正在开发这个网站的第二阶段,我已经在子文件夹中制作了一个副本(例如www.abcdef.com/new/)。问题是,如果我点击此副本站点上的链接,它会将我重定向到根目录,而我希望它转到新/文件夹中的等效页面。我在这个新的/文件夹中放了另一个.htaccess文件,但是没有任何明显的效果:
Options -MultiViews
# CheckSpelling off
RewriteEngine On
RewriteBase /new/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /new/index.php?url=$1 [L]
ErrorDocument 404 /index.php
所以我的问题是:是否可以在这样的子文件夹中添加另一个.htaccess文件?如果是这样,为什么上述线路不起作用?
提前感谢您提出任何想法!
答案 0 :(得分:2)
可以有多个.htaccess文件,系统可以按照您想要的方式工作。
您正在设置RewriteBase
,explicitly sets the base URL-path (not filesystem directory path!) for per-directory rewrites。
因此,您的请求似乎会被重写为/new/new/index.php
,这是一个可能在您的文件系统上不存在的路径和目录(因此不符合您的RewriteCond
),并且会被重定向到你的/index.php 404。
作为测试,也许可以尝试将ErrorDocument
更改为:
ErrorDocument
404 /new/index.php
如果您看到重写的电话,那么它可能确实是您的RewriteBase
。
答案 1 :(得分:0)
在子目录中有第二个htaccess文件应该不是问题,据我所知,你们两个看起来还不错。
您确定网站中的链接是否正确? (例如,它们是/new/foo
,而不只是/foo
)?
答案 2 :(得分:0)
你说
麻烦的是,如果我点击此副本网站上的链接, 它将我重定向到原始页面,而我想要它去 新/文件夹中的等效页面。
您是否在页面中使用绝对链接而不是相对链接?例如,如果链接看起来像"/sample"
,则在您的主网站中它将链接到http://.../sample
,如果链接位于"/new/"
下的页面内,则同样如此。如果您只使用"sample"
,则会根据页面的网址将其解析为http://..../sample
或http://...../new/sample
。