我正在努力想出一些mod_rewrite来将http://example.com/?7gudznrxdnu
翻译成http://example.com/view.php?id=7gudznrxdnu
但是任何其他页面都能正常运行,例如http://example.com/contact
等等。
答案 0 :(得分:2)
我认为这会奏效:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^[a-z0-9]+$
RewriteRule ^$ view.php?id=%{QUERY_STRING} [L]
如果您希望重写显示在浏览器的地址字段中,则必须将[L]
替换为[L,R=301]
。
说明:查询字符串(问号后面的内容)不是RewriteRule在其匹配模式中看到的URL的一部分,因此您无法在那里检查问号。在我的解决方案中,我运行规则当且仅当(RewriteCond
)查询字符串仅包含a-z
和/或0-9
时,我的规则仅重写以斜杠结尾的URL(除了查询字符串)。我将其重定向到view.php?id=
,然后将查询字符串附加到该页面。
编辑:在我的Apache服务器上测试过,我还没有发现任何错误。
答案 1 :(得分:1)
你应该尝试(在.htaccess中):
RewriteEngine On
RewriteRule ^\?([^/\.]+)?$ view.php?id=$1 [L]