我正在使用 Perch 开发一个小型 CMS 解决方案。它目前在我的本地开发机器上的 WampServer 上运行。
由于 Perch 不提供开箱即用的友好 URL,我想实现这一点,同时确保 /perch 目录保持不变。
到目前为止,我已经完成了重写部分,即对 /blog.php 的请求将 301 发送到 /blog,并且 /blog 将重写为 /blog.php,使用以下规则:
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Rewrites domiain.com/file to domain.com/file.php
RewriteCond %{REQUEST_URI} !^/perch
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# Redirects domain.com/file.php to domain.com/file
RewriteCond %{REQUEST_URI} !^/perch
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_URI} ^(.+)\.php$
RewriteRule (.*)\.php$ /$1 [R=301,L]
但是,我仍然在 HTML 输出中留下了 .php 扩展名。我尝试将以下内容添加到我的 .htaccess 文件中:
AddOutputFilterByType SUBSTITUTE text/html
#Replace all .php extensions
Substitute s|.php||ni
#Original blog pattern /blog/post.php?s=2014-11-18-my-first-blog-post
Substitute s|blog/post\?s=(\w+)|blog/$1|i
但是,这适用于全局,即甚至适用于 /perch 文件夹中的链接。我无论如何都找不到添加条件以将其应用于除 /perch 文件夹之外的所有内容 - 有这样的方法吗?
我还查看了 ProxyPass/ProxyReversePass 文档,但是仅仅替换页面上的一些 HTML 似乎有点过头了。
任何帮助将不胜感激。
亲切的问候,dotdev