我迫切需要快速提示。
尝试使用htaccess来改变这个不那么可爱的网址
http://localhost/test/index.php?page=Article&articleID=61
到
http://localhost/test/article/2015-09-21-this-is-the-headline
从我收集的内容中,我需要将最后一部分发送到php脚本,然后可以从数据库中获取匹配的id。知道我应该能够将用户发送到原始网址。
RewriteRule ^(.*)\/article\/(.*)$ redirect/article.php [L]
# RewriteRule ^(.*)$ index.php
截至目前,我还没有将信息传递给脚本。 redirect / article.php 只包含一个print语句,一旦我走到那一步就让我知道。
然而,尽管我的大脑和每个正则表达式调试器都说不然,但它与第二个代码框中提供的url不匹配。我得到的只是好老404.如果我激活第二条规则它会应用到我的网址,告诉我第一条规则只是被跳过。
我错过了什么?
htaccess的:
<IfModule mod_rewrite.c>
RewriteEngine On
# rename individual pages
RewriteRule ^(.*)\/article\/(.*)$ redirect/article.php [L]
# RewriteRule ^(.*)$ index.php
# resize images
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.)*\/([0-9]+)\-(([0-9]|[a-z])+)\.(prev)$ filePreview.php?id=$2&size=$3 [L]
php_value upload_max_filesize 20M
php_value post_max_size 21M
</IfModule>
答案 0 :(得分:1)
.htaccess文件的位置通知您必须如何列出mod_rewrite的路径。在.htaccess内部,RewriteRule
的路径未收到前导/
。由于您的/test
居住在(.*)
,因此规则开头的/
并未与任何内容匹配且无害。由于之后是article/
,/
路径预计将永远不会收到article
。最简单的解决方法是通过以下方式更改此规则以匹配RewriteRule ^article/(.*) redirect/article.php [L]
:
$1
假设您将其用作PHP脚本中的查找,请添加一个参数以使用RewriteRule ^article/(.*) redirect/article.php?article=$1 [L]
捕获的模式,如:
RANK