我有一些复杂的重写场景,我可以使用一些专家建议。我有一个目录,“/ 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并希望保持这些大量生成的文件与其他文件隔离。
答案 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]