URL更改.htaccess代码不起作用

时间:2014-02-16 00:01:19

标签: regex .htaccess url wampserver

我想改变:

localhost/article.php?id=bryan

简单地说:

localhost/article/bryan

如果是这样的话:

localhost/article.php?id=Mark%20Henry%20is%20Drawing

我需要将其改为:

localhost/article/mark-henry-drawing

这里的一位老乡给了我这个代码:

RewriteEngine On
RewriteRule ^article/([^/]*)$ /article.php?id=$1 [L]

每个人都说应该这样做,但每次输入时我仍然会收到内部服务器错误:

localhost/article/bryan

我正在使用WAMP服务器,如果它有帮助,以下代码是我的整个.htaccess文件:

Options +FollowSymLinks
RewriteEngine On

# Removes the .php extension from pages
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

# Cleans up the PHP URL of all pages on website
RewriteRule ^article/([^/]*)$ /article.php?id=$1 [L]

我不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:1)

当前.htaccess的问题是它进入循环导致内部服务器错误。

要制作您想要的工作,您需要在请求中捕获URL并重定向它,然后在内部将其重定向:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Redirect /article.php?id=bryan to /article/bryan
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+article\.php\?id=([^\s]+) [NC]
RewriteRule ^ /article/%1? [R=302,L]

# Internally forward /article/bryan to /article.php?id=bryan
RewriteRule ^article/([^/]+)/?$ /article.php?id=$1 [L,NC]

但是,没有简单的方法可以将%20转换为空格或-,您必须从系统中解决这个问题。