我刚才在stackoverflow上询问了this question的部分内容,这很有效: ES
我有一个多域服务器,每个目录都对应一个域名。但是我的主域名www.mydomain.com也是我服务器上的目录,并没有自动链接。
这就是为什么我在网站的根目录中使用它...
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -d
RewriteRule ^(.*)$ /my-website/$1 [L]
现在,当我致电www.my-website.com时,它会自动运行/my-website
目录。那很好。但是在这个目录中我还有另一个.htaccess文件。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^/projects/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^/jobs/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^(/downloads/.+)/?$ assets/$1 [L,NC]
所以这意味着对于这个网站,像/projects/
这样的链接只是“被忽视”而实际上并不存在。
但是如果我现在在我的服务器上运行这个网站并且由于我的root中的main-htaccess文件,我的子目录中的RewriteConditions不起作用,我得到一个“未找到”
我该如何协同工作?
答案 0 :(得分:0)
这样做:
<强>的DocumentRoot / htaccess的:强>
RewriteEngine On
RewriteBase /
RewriteRule ^projects/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^jobs/(.+?\.php)$ /$1 [L,NC]
RewriteRule ^(downloads/.+)/?$ assets/$1 [L,NC]
# add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{REQUEST_URI} !^/my-website/
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/my-website%{REQUEST_URI} -d
RewriteRule ^(.*)$ /my-website/$1 [L]
<强> /my-website/.htaccess:强>
RewriteEngine On
RewriteBase /my-website/
# add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/my-website/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
答案 1 :(得分:0)
当问题被删除时,我在serverfault上发布了这个帖子。你已经有了一个合适的答案,但我想我还会在这里发帖,所以你可以对此有一些解释:
如果子文件夹中的.htaccess中有mod_rewrite指令,则只应用那些指令,不会应用父文件夹的指令。您可以使用
使父文件夹的.htaccess中的规则适用RewriteOptions Inherit
子文件夹中的指令。但后来它可能变得有点凌乱。您需要记住,在子文件夹中重写规则后,应用了父文件夹中的规则。最好只使用1 .htaccess文件中提出的解决方案。
你的最后一次RewriteRule搜索&#34; /&#34;在开始时,它们在每个目录上下文中从不具有,但在每个服务器上下文中具有。因此,如果您在.htaccess文件中(每个dir上下文),那么将使用在开头没有/的字符串进行比较。请参阅有关RewriteRule。
的文档