有关mod_rewrite规则的问题

时间:2012-10-24 18:33:36

标签: apache mod-rewrite url-rewriting rewrite

我有一些复杂的重写场景,我可以使用一些专家建议。我有一个目录,“/ directory”包含一些文件。我想将对该目录中不存在的文件的请求重写为另一个也存在的目录,将原始目录保留在URL中,并为无效路径返回404。示例

存在:

/directory/file.php

这不存在:

/directory/subdirectory/anotherfile.php

......但确实存在:

/another_directory/subdirectory/anotherfile.php

所以我想

/directory/subdirectory/anotherfile.php to refer to /another_directory/subdirectory/anotherfile.php

...但是如果/ another_directory中的文件夹/文件不存在/规则应该返回404。

我尝试了各种组合,但它们都不会返回404或重定向。这是我最近的尝试:

RewriteCond %{DOCUMENT_ROOT}/another_directory/$1 f [OR] 
RewriteCond %{DOCUMENT_ROOT}/another_directory/$1 d 
RewriteRule (.*) - [S=1]
RewriteRule ^directory/(.*)$ /another_directory/$1 [L, QSA]

如果它有助于解释为什么我有这种情况,/ another_directory /充满了周期性重新生成的静态文件,这些文件看起来与/ directory /中的现有文件位于同一目录中,我正在从动态页面转移到生成静态那些并且不想弄乱我的serps并希望保持这些大量生成的文件与其他文件隔离。

1 个答案:

答案 0 :(得分:1)

以下是我从您的解释中理解的内容:

/directory/subdirectory/anotherfile.php

这应该改写为

/another_directory/subdirectory/anotherfile.php

是否存在。如果我是对的,这是你的答案,否则告诉我更多!

RewriteCond %{DOCUMENT_ROOT}/another_directory/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/another_directory/$1 -d 
RewriteRule ^directory/(.*) another_directory/$1 [L,S=1]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*)  - [L]
RewriteRule (.*)   404.php?uri=/$1&id=1 [L]