我正在尝试将mod_rewrite用于我网站上的两件事。
首先,我想隐藏URL中的.php文件扩展名。 (例如 website.com/about.php website.com/about ) 而且我的工作正常。
但我也希望简化带有查询和参数的URL,以使它们更适合SEO。 (例如 website.com/work/item.php?id=item-slug 成为 website.com/work/item-slug )
到目前为止,这是我的.htaccess文件,但它给了我一个内部服务器错误...
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
# Interpret "work/(ARG)" as "work/item.php?id=(ARG)"
RewriteRule ^work/(*.)$ work/item.php?id=$1 [L]
</IfModule>
答案 0 :(得分:2)
您收到500错误,因为*.
是无法编译的无效正则表达式。此外,您需要跳过上次重写规则中的文件/目录。
Options -MultiViews
RewriteEngine On
RewriteBase /
# Interpret "work/(ARG)" as "work/item.php?id=(ARG)"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^work/([\w-]+)/?$ work/item.php?id=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]