我正在尝试使用.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
答案 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