用于静态原型设计的简单的一体式mod_rewrite



我将提供我的问题的一些背景。我正在为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

注意:此脚本将浏览器重定向到目标脚本,而不是为其本身提供服务。

最新更新