mod_rewrite和RewriteRule的内部服务器错误

时间:2016-11-16 12:18:56

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试将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>

1 个答案:

答案 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]