我通过index.php发送每个请求,但我的blog子目录中的页面除外。我已经能够在父文件夹中使用mod_rewrite执行此操作;
RewriteCond %{REQUEST_URI} !^/blog
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
但是,我还想将请求发送到我的博客文件夹,如果它们的格式为:
文档/一些文件。
我试过了:
RewriteRule ^/documentation/(.+)$ https://www.some_domain.com/blog/documentation/$1
但看起来就像我的请求在这种情况下没有被发送到博客文件夹一样。我的完整代码如下:
RewriteEngine On
#redirect to index.php as appropriate
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/documentation/(.+)$ https://www.some_domain.com/blog/documentation/$1
RewriteCond %{REQUEST_URI} !^/blog
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
编辑:
我在下面使用了@Rijul建议的略微修改版本,在将RewriteRule移到RewriteCond之前,它按照我的希望工作。换句话说,重写文档执行重写到博客子文件夹。并且,所有其他请求都通过我的index.php文件。在这一点上,我想了解原因。
RewriteEngine On
RewriteRule ^documentation/?(.*)$ /blog/documentation/$1 [R=301,L]
#redirect to index.php as appropriate
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
答案 0 :(得分:2)
据我所知
RewriteEngine On
如果没有这个,所有重写规则和条件都将被忽略
RewriteRule ^documentation/?(.*)$ /blog/documentation/$1 [R=301,L]
将文档重写为博客/文档
RewriteCond %{REQUEST_FILENAME} !-d
此重写条件检查请求的目录名称是否不退出。如果它没有退出。然后进入下一个条件
RewriteCond %{REQUEST_FILENAME} !-f
此重写条件检查所请求的文件名是否不退出。如果它没有退出。然后进入下一个条件
RewriteCond %{REQUEST_FILENAME} !-l
此重写条件检查所请求的符号链接是否未退出。如果它没有退出。然后继续重写规则
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
重写为index.php?url =
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
写这样的重写条件会产生一个和操作。
(没有文件以该名称退出)和(该名称中没有目录退出)和 (没有符号链接以该名称退出)
如果这是真的,那么重写到php文件。对于 / blog ,(该名称中没有目录退出)将变为false(因为这样的目录退出)