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

时间:2012-11-21 17:24:58

标签: php mod-rewrite static

我将提供一些问题背景。我正在为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 /到../../ images /等工作,所以嘘这个解决方案。我需要使用mod_rewrite来使它工作。

此外,mod_rewrite代码块对文件夹内容无效,所以我在这里开始搜索以找到解决方案,这样我就可以/level1_level2_levelx.php/level1/level2/level3/或{{1 }}。我确实在很多方面进行了搜索,但我找不到正确答案。

谢谢大家,

PD:我正在使用MAMP。

1 个答案:

答案 0 :(得分:0)

在Rewrite前面我猜测以下内容应该按照你的要求进行:

内部重写输入的网址:

  http://localhost:8888/file  
  OR:
  http://localhost:8888/file/  

to:

  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-handler-script.php 来做你想要的任何内部映射,例如

http://www.phpriot.com/articles/search-engine-urls/4

注意:此脚本会将浏览器重定向到目标脚本,而不是自行提供。