【发布时间】:2015-12-13 05:43:14
【问题描述】:
到目前为止,我的 htaccess 看起来像这样
RewriteEngine On
RewriteCond %{QUERY_STRING} ArticleID=([^&]+)
RewriteRule ^article.cfm$ /articles.php?id=%1 [R=301,L]
RewriteRule ^([a-zA-Z0-9-]+)$ page.php?slug=$1
RewriteRule ^([a-zA-Z0-9-]+)/$ page.php?slug=$1
ErrorDocument 404 "<H1>Page not found</H1>"
前 3 行允许我将通过 .cfm 访问文章的用户重定向到 .php
对于第 4 行和第 5 行,我的网站允许通过 WYSIWYG 编辑器创建页面并允许用户访问它。实际的 url 看起来像 www.website.com/page.php?slug=homepage 但在重写规则之后,它看起来像 www.website.com/homepage
但是,我的管理页面(例如 www.website.com/admin/)被视为页面之一时遇到了问题,因此我添加了以下代码并且它可以工作
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
但我仍然有几个问题。
如果你访问一个无效页面,例如www.website.com/hello/,而用户根本没有创建这样的页面,它仍然会显示page.php,但内容为空,我该怎么办将其重定向到 404 页面?
如何保护没有 index.php 页面的目录?比如我的图片文件夹,包括文件夹,javascript文件夹等?
我的整个 htaccess 在当前位置是否正确?
非常感谢你们的帮助!我不擅长 mod_rewrite,所以我会感谢你的帮助!
【问题讨论】:
-
您的匹配模式
^([a-zA-Z0-9-]+)/$也将匹配任何hello,因此它将被路由到page.php?slug=hello
标签: apache .htaccess mod-rewrite