我想使用mod_rewrite(在.htaccess中)将"干净"的URL映射到子目录中它们对应的php文件,例如:
https://example.com/test/
-->
https://example.com/p/test.php
我的第一步是给所有没有斜杠的URL添加尾部斜杠:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
然后,我添加了以下几行,以确保该路径/文件不存在:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
最后是将所请求的路径映射到子目录/p/
中的相应文件的RewriteRule
:
RewriteRule ^(.+)$ /p/$1\.php
这似乎工作得很好--除非我请求的URL不存在.然后,该操作将导致无限循环,例如:
https://example.com/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/p/test/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/.php/
我已经try 在RewriteRule
之前再添加RewriteCond
,以确保所请求的文件确实存在于子文件夹/p/
中,但我的方法不起作用:
RewriteCond %{DOCUMENT_ROOT}/p/$1.php -f
有人能告诉我我做错了什么吗?