我将提供一些问题背景。我正在为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。答案 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
注意:此脚本会将浏览器重定向到目标脚本,而不是自行提供。