URL重写日历网站

时间:2013-11-10 23:55:02

标签: php .htaccess url-rewriting

我正在尝试使用.htaccess使我的日历网站的网址看起来更好,但我无法让它工作。


我已经有了一个删除.php扩展名的规则,它完美无缺。它看起来像这样:

RewriteEngine On
# turn on the mod_rewrite engine

RewriteCond %{REQUEST_FILENAME}.php -f
# IF the request filename with .php extension is a file which exists
RewriteCond %{REQUEST_URI} !/$
# AND the request is not for a directory
RewriteRule (.*) $1\.php [L]
# redirect to the php script with the requested filename

我当前的网址如下所示: http://mydomain.com/calendar/calendar-site?year=2013&month=november

...我想让它看起来像这样: http://mydomain.com/calendar/2013/November

网站运行完美,没有重写,我使用$ _GET []获取URL中年份和月份的值,但是重写时,它无法从网址获取值。


我已经尝试过这些(当然不是两者兼而有之)

RewriteRule ^calendar/([^/]*)$ /calendar-site.php?year=$1&month=$2 [L]
RewriteRule ^([^/]*)/([^/]*)$ /calendar-site.php?year=$1&month=$2 [L]

第一个创建一个404页面而第二个不能从url中获取值+它弄乱了样式表。


希望你们能在这里帮助我:D

谢谢 - Jesper

1 个答案:

答案 0 :(得分:1)

你很亲密,但是在你的第一次尝试中,你只包括一年中的一个匹配组,而不是本月的一个匹配组。包括两次字符类,以匹配捕获到$1的年份,再次匹配$2中捕获的月份。使用RewriteBase设置重定向的根目录。请注意,“月份”值与URL中的情况相同。

RewriteEngine on
RewriteBase /
RewriteRule ^calendar/([^/]*)/([^/]*)$ /calendar/calendar-site.php?year=$1&month=$2 [L]

使用http://htaccess.madewithlove.be/

进行测试
input url
http://mydomain.com/calendar/2013/november

output url
http://mydomain.com/calendar/calendar-site.php

debugging info
1 RewriteBase /
2 RewriteRule ^calendar/([^/]*)/([^/]*)$ /calendar/calendar-site.php?year=$1&month=$2 [L]
  This rule was met, the new url is http://mydomain.com/calendar/calendar-site.php
  The tests are stopped because the L in your RewriteRule options