我有一个网站,可以从 Markdown 文件生成页面。我有一个 PHP 脚本,它为它找到的每个 Markdown 文件生成一个 .php 文件,所以例如 localhost/markdown_files/example_page.md 变成了 localhost/pages/example_page.php.
这行得通,但它需要脚本检查所有的 Markdown 文件,即使是添加或编辑一个文件。相反,我改变了它,所以每个页面只在我打开它时生成。如果 localhost/pages/example_page.php 存在,这不是问题,但如果尚未创建 .php 文件,我不知道该怎么办。
我能想到的最好的是:
在 localhost/pages/ 中捕获 404 并将其重定向到其他地方,同时将原始 URL 作为参数发送。所以打开 localhost/pages/nonexistent_file.php 将重定向到 localhost/generete_file.php,这将创建 localhost/pages/nonexistent_file.php 并再次重定向到原始 URL,到新创建的文件。
但我正在努力寻找如何做到这一点,如果可能的话,更不用说它是否是我问题的正确解决方案。
想通了!我意识到因为我不再提前生成 HTML,而是在每次加载页面时生成它,所以我根本不需要保存文件。所以我在 .htaccess 中添加了:
RewriteCond %{REQUEST_URI} ^/pages [NC,OR]
RewriteCond %{REQUEST_URI} /pages\/[\w]+\.(php) [NC]
RewriteRule .* /page_generator.php [L]
这会将 localhost/pages/nonexistent_file.php 重定向到 localhost/page_generator.php,它会在保留原始 URL 的同时输出 HTML,或者如果 Markdown 文件不存在则重定向到 404。目录“localhost/pages”根本不需要存在。