0

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

4

1 回答 1

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]
于 2012-10-25T00:59:44.700 回答