1

我将提供一些我的问题的背景。我正在为 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.phpto/level1/level2/level3//level1/level2/level3. 我确实在很多方面进行了搜索,但我没有找到正确的答案。

谢谢你们,

PD:我正在使用 MAMP。

4

1 回答 1

0

在重写方面,我猜测以下内容应该满足您的要求:

内部重写输入的 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-handler-script.php以在内部进行您想要的任何映射,例如

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

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

于 2012-11-23T11:25:33.643 回答