我将提供我的问题的一些背景。我正在为PHP CMS开发一个静态HTML5/CSS3原型。我想要的一件事是拥有干净的URL。我一开始就有这样的东西:
localhost:8888/file.php
并希望它:
localhost:8888/file
或不带尾部斜线localhost:8888/file
我在Stackoverflow上做了一个快速搜索,发现了几个关于这个问题的结果,我好心地用这个来做这项工作:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ $1.php
RewriteRule ^(.*?)/?$ $1.php
这种方法的问题是当我想在我的CMS结构上设置深层次时,比如网站/帖子。如果没有mod_rewrite,我需要创建文件夹,并对代码进行剧烈的更改,以使事情像/图像/到..//images/等等,所以对该解决方案表示反对。我需要使用mod_rewrite使其工作。
此外,mod_rewrite代码块也不适用于文件夹内容,所以我在这里开始搜索以找到解决方案,这样我就可以执行/level1_level2_levelx.php
到/level1/level2/level3/
或/level1/level2/level3
。我确实在很多方面进行了搜索,但没有找到正确的答案。
谢谢大家,
PD:我在用MAMP。
在重写方面,我猜以下内容应该满足您的要求:
内部重写输入的URL:
http://localhost:8888/file
OR:
http://localhost:8888/file/
到:
http://localhost:8888/file.php
规则:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !.php$
RewriteCond %{REQUEST_FILENAME} ^(.*)/?$
RewriteCond %1.php -f
RewriteRule ^(.*)/?$ $1.php [L]
但听起来你真的想要一个在Apache中配置的自定义404处理程序,例如
<FilesMatch ".(css|js|jpg|png|gif)$">
ErrorDocument 404 "File not found."
</FilesMatch>
<Files favicon.ico>
ErrorDocument 404 "-"
</Files>
ErrorDocument 404 /404-handler-script.php
并添加了一个相关的404处理程序脚本.php,以便在内部执行任何您想要的映射,例如
http://www.phpriot.com/articles/search-engine-urls/4
注意:此脚本将浏览器重定向到目标脚本,而不是为其本身提供服务。